的方法基于post How to call a function by its name (std::string) in C++?,尝试使用CLASS创建一个版本,但是我的方法不起作用。如何通过名称调用函数。使用STL :: map和Class
class A {
public:
int add(int i, int j) { return i+j; }
int sub(int i, int j) { return i-j; }
};
typedef int (*FnPtr)(int, int);
int main(int argc, char* argv[]) {
// initialization:
std::map<std::string, FnPtr> myMap;
A a;
myMap["add"] = a.add;
myMap["sub"] = a.sub;
返回此埃罗:
main.cpp:31:22: error: cannot convert ‘A::add’ from type ‘int (A::)(int, int)’ to type ‘std::map<std::basic_string<char>, int (*)(int, int)>::mapped_type {aka int (*)(int, int)}’
main.cpp:32:22: error: cannot convert ‘A::sub’ from type ‘int (A::)(int, int)’ to type ‘std::map<std::basic_string<char>, int (*)(int, int)>::mapped_type {aka int (*)(int, int)}’
有谁知道什么是错误?
成员函数不是函数。你不能*调用成员函数(比如''myMap [“add”](1,2)'“),因为这没有意义。相反,您需要以某种方式组合* class member *'A :: add'和实例对象'a'。 –
指向成员的指针与指向非成员的指针不同。但是如果你使用了编译器错误,你本可以自己找到它。改变'typedef int(* FnPtr)(int,int);'到'typedef int(A :: * FnPtr)(int,int);'并将其称为'a。*(myMap [“add”])( 42,1337);'。太可怕了,不是吗? – 2013-10-20 17:06:42
这里有一个更基本的问题:成员函数与非成员函数不同。 – juanchopanza