gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:17:57 25 4
gpt4 key购买 nike

我的小宠物项目有一个有趣的用例,我想要一个

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

在类里面。这很简单,虽然语法有点麻烦,但效果很好。

我还想做的是让指向成员函数的指针在我的静态初始化器中成为一个简单的 lambda 表达式。这将使在一个漂亮的宏中打包这样的东西变得非常容易。

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

最佳答案

如果你有std::function<void(const MyClass&)>在你的 map 中,然后你可以存储一个将你的类的实例作为参数的lambda。只要 lambda 定义在 MyClass 的成员函数中它将能够访问 MyClass 的私有(private)类成员:

#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 .

关于c++ - 是否可以在 C++ 中定义匿名成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31219746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com