如何用其内容替换字符串变量?

时间:2011-03-09 09:25:41

标签: c++ linux

我有一个字符串变量var = "BaseClass",然后我必须用其功能中的内容替换该var,例如我正在调用此"BaseClass"函数BaseClass::func_name(); 现在我的问题是,如果我必须从名称存储到var字符串即var::func_name()的类中调用函数,我们可以用其内容替换var变量,并调用正确的类函数。

提前致谢。

5 个答案:

答案 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();
}