我的小宠物项目有一个有趣的用例,我希望有一个
static map<std::string, pointer-to-member-function>
在课堂上。如果语法有点麻烦,这很容易,而且效果很好。
我还想做的是将指向成员函数的指针作为静态初始化程序中的简单lambda表达式。这样可以很容易地将这样的东西打包成一个漂亮的宏。
我希望指向成员函数的指针能够访问私有类成员,因此我不能真正使用带有“this”的普通lambda作为参数。 但是我似乎无法找到任何方法来定义匿名成员函数 - c ++ lambdas似乎都是免费的全局函数?
答案 0 :(得分:3)
如果地图中有std::function<void(const MyClass&)>
,那么您可以存储一个lambda,它将您的类的实例作为参数。只要lambda在MyClass
的成员函数中定义,它就能够访问MyClass
的私有类成员:
#include <map>
#include <functional>
class MyClass {
private:
void myPrivate() const { }
public:
static std::map<std::string, std::function<void(const MyClass&)>> funcs;
static void initFuncs() {
funcs["test"] = [](const MyClass& mc) { mc.myPrivate(); };
}
};
std::map<std::string, std::function<void(const MyClass&)>> MyClass::funcs;
int main() {
MyClass::initFuncs();
MyClass mc;
MyClass::funcs["test"](mc);
}