Allows to have a hash map built at compile time. The map could be used to perform runtime as well as compile-time lookups.
- C++-14 supporting compiler
- Header-only usage without any external dependencies, except the Standard Library.
More examples could be found in tests/tests.cpp.
classJsonSerializable {
public:virtual~JsonSerializable() {}
static JsonSerializable* createFromJson(JsonObject const& json_object);
};
classHoly : publicJsonSerializable {
public:static JsonSerializable* createFromJson(JsonObject const& json_object) {
auto holy = new Holy;
// Fill `holy` with data from `json_object`return holy;
}
};
classMoly : publicJsonSerializable {
public:static JsonSerializable* createFromJson(JsonObject const& json_object) {
auto moly = new Moly;
// Fill `moly` with data from `json_object`return moly;
}
};
classMiny : publicJsonSerializable {
public:static JsonSerializable* createFromJson(JsonObject const& json_object) {
auto miny = new Miny;
// Fill `miny` with data from `json_object`return miny;
}
};
classMoe : publicJsonSerializable {
public:static JsonSerializable* createFromJson(JsonObject const& json_object) {
auto moe = new Moe;
// Fill `moe` with data from `json_object`return moe;
}
};
JsonSerializable* JsonSerializable::createFromJson(JsonObject const& json_object) {
constexprauto spec = ctm::makeHashMapSpec(std::make_tuple("Holy", &Holy::createFromJson),
std::make_tuple("Moly", &Moly::createFromJson),
std::make_tuple("Miny", &Miny::createFromJson),
std::make_tuple("Moe", &Moe::createFromJson));
staticconstexprauto map = ctm::HashMap<decltype(spec),
spec.maxBucketSize,
spec.bucketCount,
spec.elementCount>::make(spec);
auto factory_function = map[json_object.at("type")];
if (factory_function == nullptr)
returnnullptr;
returnfactory_function(json_object);
}