我有以下设置:
typedef std::function<void()> reaction;
class Node
{
public:
...
private:
void connect();
void receive();
private:
const std::map<std::pair<Status, Event>, reaction> TransTable = {
{{DISCONNECTED, CONNECT}, &Node::connect},
{{CONNECTING, RECEIVE}, &Node::receive}
};
}
但我总是会犯错误:
error: could not convert from <brace-enclosed initializer list> to const std::map<std::pair<Status, Event>, std::function<void()> >
我的终结器列表有什么问题吗?
发布于 2017-09-14 13:17:00
您的问题是缺少了一个MCVE,但是错误消息非常清楚:reaction
似乎是std::function<void()>
的typedef。成员函数指针(如&Node::connect
)不能转换为std::function<void()>
,因为后者缺少任何类型的this
参数,可以在此参数上实际调用函数。
但是,您可以使用lambda捕获和存储当前正在初始化此TransTable
成员的实例:
const std::map<std::pair<Status, Event>, reaction> TransTable = {
{{DISCONNECTED, CONNECT}, [this] { connect(); }},
{{CONNECTING, RECEIVE}, [this] { receive(); }}
};
https://stackoverflow.com/questions/46220073
复制相似问题