Class C++;11创建未知类的对象 我正在开发一个C++应用程序,在那里我需要创建X类的类。比如说:AAA级、BBB级和CCC级。每个类对应一种我需要处理的对象类型。 另一方面,我有一个CVS类型的输入文件。该输入文件的一个示例如下所示: AAA,3432443,433434,11111,45678 AAA,8778776,786698,22222,86881 BBB,4452332,112234,34543,87734

Class C++;11创建未知类的对象 我正在开发一个C++应用程序,在那里我需要创建X类的类。比如说:AAA级、BBB级和CCC级。每个类对应一种我需要处理的对象类型。 另一方面,我有一个CVS类型的输入文件。该输入文件的一个示例如下所示: AAA,3432443,433434,11111,45678 AAA,8778776,786698,22222,86881 BBB,4452332,112234,34543,87734,class,c++11,Class,C++11,因此,我需要解析该输入文件,并根据该行的第一个元素(AAA、BBB、CCC),创建相应的对象,该对象将存储在该行中找到的其他值。 但是,我不能在应用程序中“嵌入”可能的类(AAA、BBB、CCC)以使用条件链,如: 如果(令牌==“AAA”),则AAA=新AAA(参数) 相反: 应用程序必须保持独立于现有类,以便将来我们可以添加DDD、EEE等类。。。ZZZ,不修改创建对象的模块(在使用条件的情况下,我应该添加,例如:if(token==“DDD”),然后DDD DDD=new DDD(par

因此,我需要解析该输入文件,并根据该行的第一个元素(AAA、BBB、CCC),创建相应的对象,该对象将存储在该行中找到的其他值。 但是,我不能在应用程序中“嵌入”可能的类(AAA、BBB、CCC)以使用条件链,如:
如果(令牌==“AAA”),则AAA=新AAA(参数)
相反:

  • 应用程序必须保持独立于现有类,以便将来我们可以添加DDD、EEE等类。。。ZZZ,不修改创建对象的模块(在使用条件的情况下,我应该添加,例如:
    if(token==“DDD”),然后DDD DDD=new DDD(params)
    。这是禁止的
  • 我创建了一个配置文件,提供当前执行中可能的类类型: AAA BBB CCC ... 通过这种方式,我可以循环此类类型,并与从输入文件行的第一个元素读取的类型进行比较。但我陷入了如何创建未知类的对象的问题中。类似这样的问题:
    retrieved_type_from_input_file object=new retrieved_type_from_input_file(params);
    其中,“从输入文件中检索的类型”是一个变量,它包含我应该创建的类的有效类型:AAA…ZZZ
  • 我在思考泛型编程。比如:
    T对象=新的T(参数);
    但是,即使我可以在类中编写此代码,在实现中我需要类的真实名称
  • 我还在考虑实现某种工厂模式,创建某种抽象父类(“东西”),每个人都将从中继承(AAA类:公共东西)但是我发现的所有模型,在创建对象的时候,都在代码的某个地方明确引用了类的名称
需要帮忙吗?
非常感谢!!

我猜您需要代码生成器:

步骤1.编写一个程序,根据配置文件在.h、.cpp文件中生成类

您还可以在此步骤中创建/声明类的对象

步骤2.使用生成的类来构建exe文件


这是我的粗略想法,并从其他人那里寻找其他可能性。

我猜,您需要代码生成器:

步骤1.编写一个程序,根据配置文件在.h、.cpp文件中生成类

您还可以在此步骤中创建/声明类的对象

步骤2.使用生成的类来构建exe文件


这是我粗略的想法,寻找其他的可能性。< / P>查找“工厂模式”。如果你能做一些格式化,它会使阅读变得更容易。谢谢。C++没有反射。可能的副本Javavier-Mald:谢谢格式化问题!查一下“工厂模式”如果你能做一些格式化,它会使阅读变得更容易。谢谢。C++没有反射。可能的复制品Javavier-Mald:谢谢你格式化这个问题!嗨,你有机会实现,你做了什么,而且好奇吗?你是用过的工厂还是使用过的代码生成器或别的什么东西?嗨,你有没有机会去IMPL?嗯,你们是怎么做到的,有点奇怪。你们是用过工厂还是用过代码生成器或者其他什么东西。