C ++调用string的方法

时间:2013-01-14 15:59:30

标签: c++ qt

在Qt中有这样的功能:QMetaObject::invokeMethod(QObject * obj, const char * member, ...),它从字符串(成员)调用方法。我怎么能这样做(或类似)?感谢)

2 个答案:

答案 0 :(得分:4)

你不能在纯c ++中做到这一点,但你可以在this问题

中阅读c ++中的反思/内省

答案 1 :(得分:4)

使用map<std::string, std::function<void()>>

可以实现类似的功能
std::map<std::string, std::function<void()>> funs;
funs["hello world"] = [] () { std::cout << "hello world"; };
funs["hello world"]();

问题是你想要它有多相似? 这个电话应该如何“原生”?。你可以这样做:

void foobar(int, float);

...

    invoke("foobar", 5, 5.f);

但实施看起来很糟糕,并且非常重要。

a related problem

  

你可以使用可变参数模板和一些模板/虚拟技术。使用以下代码,您将能够执行以下操作:

std::string select_string (bool cond, std::string a, std::string b) {
    return cond ? a : b;
}

int main () {
    Registry reg;
    reg.set ("select_it", select_string);
    reg.invoke ("select_it", "1 John Wayne"));
    reg.invoke ("select_it", "0 John Wayne"));
}

即。其中参数列表被解析为本机函数调用的真实参数列表。使用可变参数模板,您可以做很多事情;我不确定你应该