将类成员函数作为地址放入map中需要使用C++中的函数指针,由于类成员函数有一个隐含的this指针,因此需要使用成员函数指针来存储函数地址。
具体实现方法如下:
定义一个类
class MyClass {
public:
void func1(int a) {
cout << "func1 called with " << a << endl;
}
void func2(int b) {
cout << "func2 called with " << b << endl;
}
};
定义一个map,键为字符串类型,值为成员函数指针类型
map<string, void (MyClass::*)(int)> myMap;
这里定义的void (MyClass::*)(int)
是一个成员函数指针类型,它可以存储MyClass
类中的成员函数,其中void
是函数的返回类型,(MyClass::*)
表示成员函数指针的类型,int
表示成员函数的参数类型。
将类成员函数作为地址放入map中
MyClass myObject;
myMap["func1"] = &MyClass::func1;
myMap["func2"] = &MyClass::func2;
这里将类MyClass
中的成员函数func1
和func2
的地址分别存入map中,可以通过字符串键值来访问它们。
通过成员函数指针调用类成员函数
(myObject.*myMap["func1"])(10);
(myObject.*myMap["func2"])(20);
这里使用了类成员函数指针和对象指针的组合来调用类成员函数,先通过map找到成员函数的地址,然后通过对象指针和成员函数指针的组合来调用成员函数。
需要注意的是,使用类成员函数指针调用成员函数时,需要使用对象指针或引用来调用成员函数,即使用(对象.*成员函数指针)(参数)
或对象->*成员函数指针(参数)
的形式来调用成员函数。