gpt4 book ai didi

C++ std::function 运算符=

转载 作者:行者123 更新时间:2023-11-27 22:48:23 26 4
gpt4 key购买 nike

我无法用 C++11 编译一个简单的程序。你可以在这里看看http://cpp.sh/9muxf .

#include <functional>
#include <iostream>
#include <exception>
#include <tuple>
#include <map>

using namespace std;

typedef int Json;
typedef string String;

class Integer/*: public PluginHelper*/
{
public:
Json display(const Json& in)
{
cout << "bad" << endl;
return Json();
}

map<String, function<Json(Json)>>* getSymbolMap()
{
static map<String, function<Json(Json)>> x;
auto f = bind(&Integer::display, this);
x["display"] = f;
return nullptr;
}
};

问题出现在行 x["display"] = f;

如果你能让我理解这里发生的事情,你会帮上大忙 :)。std::function 可以不被复制吗?

最佳答案

你的问题出在这里:

auto f = bind(&Integer::display, this);

Integer::display 采用 Json const& 并且您绑定(bind)它时没有显式参数。我的 gcc 拒绝这样的绑定(bind)表达式,但 cpp.sh 的编译器和我的 clang 都允许这个编译,可能是错误的,因为语言标准规定:

*INVOKE* (fd, w1, w2, ..., wN) [func.require] shall be a valid expression for some values w1, w2, ..., wN, where N == sizeof...(bound_args)

您可以通过使绑定(bind)函数对象 f 正确来解决您的问题 - 只需为 Json 参数添加一个占位符:

auto f = bind(&Integer::display, this, placeholders::_1);

demo

关于C++ std::function 运算符=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40670758/

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