是否可以在C ++中定义匿名成员函数

时间:2015-07-04 10:50:57

标签: c++ lambda member-functions

我的小宠物项目有一个有趣的用例,我希望有一个

static map<std::string, pointer-to-member-function> 

在课堂上。如果语法有点麻烦,这很容易,而且效果很好。

我还想做的是将指向成员函数的指针作为静态初始化程序中的简单lambda表达式。这样可以很容易地将这样的东西打包成一个漂亮的宏。

我希望指向成员函数的指针能够访问私有类成员,因此我不能真正使用带有“this”的普通lambda作为参数。 但是我似乎无法找到任何方法来定义匿名成员函数 - c ++ lambdas似乎都是免费的全局函数?

1 个答案:

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

Live demo