我有一个字符串变量var = "BaseClass"
,然后我必须用其功能中的内容替换该var,例如我正在调用此"BaseClass"
函数BaseClass::func_name();
现在我的问题是,如果我必须从名称存储到var
字符串即var::func_name()
的类中调用函数,我们可以用其内容替换var变量,并调用正确的类函数。
提前致谢。
答案 0 :(得分:1)
不确定这是你所追求的,但你可以保留一个地图,其中名称作为键,指向BaseClass派生对象的指针作为值。错误检查省略。
typedef std::map< std::string, BaseClass* > myMap;
class A : public BaseClass
{
void func();
}
class B : public BaseClass
{
void func();
}
myMap m;
A a;
B b;
m[ "A" ] = &a;
m[ "B" ] = &b;
std::string varName = GetVarNameFromSomeWhere();
m[ varName ]->func();
答案 1 :(得分:0)
简单回答:
在C ++中,不,如果不使用某些第三方库或框架,就不能这样做。
答案 2 :(得分:0)
这是不可能的通用方式。类的名称通常不会使其成为可执行文件。而是使用函数指针(对于静态成员函数)或成员指针(对于非静态成员函数)。
答案 3 :(得分:0)
不,编译器不会让这个工作,因为在考虑变量的插值后它无法进行类型推断,它静态地需要能够确定方法的类的类型调用以生成正确的机器代码。
答案 4 :(得分:0)
您无法在C ++中动态定义新类型,但您可能可以在其他语言中使用(objective-C?)。首先,检查一下你是否真的需要它。
如果您想要使用一组有限的变量类型,即Class1,Class2,ClassN,您可以随时执行以下操作:
string var;
Class1 class1;
ClassN classN;
readFromSomewhere(var);
if (var == "Class1")
{
class1.func_name();
}
或者你真正需要的是某种类型的继承和多态代码:
string var;
Base* p1 = new Class1();
Base* pN = new ClassN();
if (var == "Class1")
{
p1->func_name();
}