gpt4 book ai didi

c++ - 使用 map cpp 创建成员变量

转载 作者:行者123 更新时间:2023-12-05 00:52:58 24 4
gpt4 key购买 nike

我正在尝试使用 std::map 键值对调用函数。我发现这篇 stackoverflow 文章 Calling a function depending on a variable?但解决方案

std::map<std::string, std::function<void()>> le_mapo;

不起作用并导致错误,例如“错误:需要左值作为一元'&'操作数”这样使用它

std::map<std::string, std::function<void()>> le_mapo;
le_mapo["ftp"] = &ftp(); // ftp function is in the same class, this function is the constructor

我试图用这个方法在同一个类中调用一个函数,它会导致左值错误,不知道该怎么做

我也试过在顶部使用

#define BE_EVIL(map, function, x) map[ #x ] = & function ## x

注意:我有所有适当的包括,例如

#include <iostream>
#include <map>
#include <functional>

这是一个可重现的示例

#include <iostream>
#include <map>
#include <functional>


class stackoverflow
{
private:
void ftp();

public:
stackoverflow();
};

void ftp()
{
std::cout << "Minimal reproduction" << std::endl;
}

stackoverflow::stackoverflow()
{
std::map<std::string, std::function<void()>> le_mapo;
le_mapo["ftp"] = &ftp();
}

最佳答案

因为 ftp 是一个成员函数,你将不得不使用 lambda在这里(好吧,你可以使用 std::bind ,但是现在 lambdas 已经在很大程度上取代了它)。

所以你想要:

le_mapo["ftp"] = [this](){ ftp(); };

This“捕获”this,从而使您能够在正确的对象上调用 ftp()

&ftp() 不起作用的原因有很多:

  • 附加 () 意味着您正在尝试调用该函数(然后获取它返回的任何地址),而不是获取 ftp 的地址> 直接。

  • 获取成员函数地址的语法是&stackoverflow::ftp,而不仅仅是&ftp

  • 你没有在任何地方传递 this,所以调用者将没有对象来调用 ftp

关于c++ - 使用 map cpp 创建成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68746637/

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