如何从json字符串创建工厂方法 我想编写一个从JSON字符串(或XML字符串)构造C++对象的工厂方法,其签名如下: BaseClass * create_class_from_json(const std::string & json_str)

如何从json字符串创建工厂方法 我想编写一个从JSON字符串(或XML字符串)构造C++对象的工厂方法,其签名如下: BaseClass * create_class_from_json(const std::string & json_str),c++,json,constructor,factory,C++,Json,Constructor,Factory,{ 如果我传递以下json字符串,该方法首先确定类是Derived1,并使用提供的参数调用的构造函数 { 'class_name':'Derived1' 'param1':10 } 实现这一点的标准方法是在class\u name上有一个长if语句,并在不同情况下构造适当的类: BaseClass * create_class_from_json(const std::string & json_str){ std::string class_name = json::extr

{

如果我传递以下json字符串,该方法首先确定类是
Derived1
,并使用提供的参数调用的构造函数

{
'class_name':'Derived1'
'param1':10
}
实现这一点的标准方法是在
class\u 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++ >有没有更好的/更优雅的方法?

< P>不,不是真的。C++没有反射。< /P>

但是,你可以在C++的C++之外,在Puthon脚本中生成一个预处理步骤。在一个源文件中,有一个Python脚本生成一些C++对象声明,然后编译。

< P>没有直接的解决方案,但是最近我看到了一个不错的。 基本上,您的工厂必须是一个单例,并且创建的对象正在使用一个模板,该模板将每个类型注册到此单例

这与GoogleTest中的测试非常相似,它在一些单例中进行自我注册


阅读文章了解更多细节。

总有更好的方法。