假设我有一个字符串,其中包含我的类名:
mystring = "CDialogChild";
我想创建一个类型名称在我的字符串中写入的对象。 我想做类似的事情:
CDialogParent dlg = CDialogParent(mystring);
我的新 dlg 现在创建为 CDialogChild 类型,我可以使用它的方法:
dlg.mycdialogchild_method();
最佳答案
C++ 中没有任何东西可以为您提供这种功能(称为反射)。
但是,如果您的类数量有限,您可以对某些工厂进行某种映射:
class IClassFactory // base interface
{ public:
virtual ~IClassFactory(){}
}
template< class T >
class ClassFactory {
/* whatever necessary here*/
public:
T* create();
};
class ClassManager
{
public:
void add( std::string name, IClassFactory* factory ) { m_map[name] = factory; }
ACommonBaseClass* create( std::string class_name ) { return m_map[class_name]->create(); } // this line isn't correct but you get the idea
private:
std::map< std::string, IClassFactory* > m_map;
};
或者类似的东西(这个写的很快)。
或者,您可以使用允许反射的脚本语言,但这会为您的应用程序添加一个完整的层。可能对嵌入 c++ 感兴趣的脚本语言:ChaiScript、Falcon、Lua、Python、AngelScript、MonkeyScript、Io、...
关于c++ - 如何从包含该类名称的字符串创建一个类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831261/