如何从json字符串创建工厂方法 我想编写一个从JSON字符串(或XML字符串)构造C++对象的工厂方法,其签名如下: BaseClass * create_class_from_json(const std::string & json_str)
{ 如果我传递以下json字符串,该方法首先确定类是如何从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
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中的测试非常相似,它在一些单例中进行自我注册阅读文章了解更多细节。总有更好的方法。