我想编写一个工厂方法,从具有以下签名的 json 字符串(或 xml 字符串)构造 C++ 对象:
BaseClass * create_class_from_json(const std::string & json_str)
{
如果我传递以下 json 字符串,该方法首先确定类是 Derived1
并使用提供的参数调用 的构造函数。
{
'class_name':'Derived1'
'param1':10
}
实现这个的标准方法是在 class_name
上有一个很长的 if
语句,并在不同情况下构造适当的类:
BaseClass * create_class_from_json(const std::string & json_str){
std::string class_name = json::extract_field(json_str, 'class_name');
if (class_name == 'Derived1')
{
int param1 = json::extract_field(json_str, 'param1')
return new Derived1(param1);
}
else if (class_name == 'Derived2')...
}
在 C++ 中有更好/更优雅的方法吗?
最佳答案
没有直接的解决方案,但最近我看到了一个不错的 article which can help you solve this in quite clever way .
基本上你的工厂必须是一个单例并且创建的对象使用一个模板将每个类型注册到这个单例。
这和google test中的test很像,都是在一些单例中自注册。
请阅读文章了解更多详情。
关于c++ - 如何从 json 字符串创建工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48818445/