我试图使用boost::bind存储任意回调函数的列表,以允许为回调指定的参数:
例:
void callback1(int something) {...}
void callback2(int onething,theotherthing) {...}
回调系统将它们存储在一个容器中:
typedef void (*lpvFunc)();
// ...
std::map <int,lpvFunc>regged_callbacks;
在某种程度上,注册功能:
registerCallback(int slot,lpvFunc cb) { regged_callbacks[slot]=cb; }
当我尝试执行绑定以适应回调时,就会出现问题。
registerCallback(1,boost::bind(callback2,42,31337));
我得到了编译器错误,比如:...note:参数2没有已知的从'boost::_bi::bind_t >‘到'lpvFunc {aka (*)()}’的转换
那么,我应该修复什么来使这个工作(因为boost::asio似乎能够在回调的指针中接受这样的东西)
发布于 2014-11-14 07:41:00
不能存储指向具有捕获的函式的原始函数指针。相反,您可以做的是存储类型擦除的函子,而不更改其他任何内容:
typedef std::function<void()> lpvFunc;
(如果您不在Boost.Function上,也可以使用C++11)
https://stackoverflow.com/questions/26933538
复制相似问题