是否可以在 C++ 中定义匿名成员函数
Is it possible to define an anonymous member function in C++
我的小宠物项目有一个有趣的用例,我想要一个
static map<std::string, pointer-to-member-function>
在 class 中。这很简单,虽然语法有点麻烦,但效果很好。
我还想做的是让指向成员函数的指针在我的静态初始化程序中成为一个简单的 lambda 表达式。这将使在一个漂亮的宏中打包这样的东西变得非常容易。
我希望指向成员函数的指针能够访问私有 class 成员,因此我不能真正使用带有 "this" 作为参数的普通 lambda。
但是我似乎找不到任何方法来定义匿名成员函数——C++ lambda 似乎都是免费的全局函数?
如果您的地图中有 std::function<void(const MyClass&)>
,那么您可以存储一个将 class 的实例作为参数的 lambda。只要在 MyClass
的成员函数中定义了 lambda,它将能够访问 MyClass
:
的私有 class 成员
#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);
}
我的小宠物项目有一个有趣的用例,我想要一个
static map<std::string, pointer-to-member-function>
在 class 中。这很简单,虽然语法有点麻烦,但效果很好。
我还想做的是让指向成员函数的指针在我的静态初始化程序中成为一个简单的 lambda 表达式。这将使在一个漂亮的宏中打包这样的东西变得非常容易。
我希望指向成员函数的指针能够访问私有 class 成员,因此我不能真正使用带有 "this" 作为参数的普通 lambda。 但是我似乎找不到任何方法来定义匿名成员函数——C++ lambda 似乎都是免费的全局函数?
如果您的地图中有 std::function<void(const MyClass&)>
,那么您可以存储一个将 class 的实例作为参数的 lambda。只要在 MyClass
的成员函数中定义了 lambda,它将能够访问 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);
}