首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何指定可以接受boost::bind函数的c++函数指针

如何指定可以接受boost::bind函数的c++函数指针
EN

Stack Overflow用户
提问于 2014-11-14 15:37:32
回答 1查看 122关注 0票数 0

我试图使用boost::bind存储任意回调函数的列表,以允许为回调指定的参数:

例:

代码语言:javascript
运行
复制
void callback1(int something) {...}
void callback2(int onething,theotherthing) {...}

回调系统将它们存储在一个容器中:

代码语言:javascript
运行
复制
typedef void (*lpvFunc)();
// ...
std::map <int,lpvFunc>regged_callbacks;

在某种程度上,注册功能:

代码语言:javascript
运行
复制
registerCallback(int slot,lpvFunc cb) { regged_callbacks[slot]=cb; }

当我尝试执行绑定以适应回调时,就会出现问题。

代码语言:javascript
运行
复制
registerCallback(1,boost::bind(callback2,42,31337));

我得到了编译器错误,比如:...note:参数2没有已知的从'boost::_bi::bind_t >‘到'lpvFunc {aka (*)()}’的转换

那么,我应该修复什么来使这个工作(因为boost::asio似乎能够在回调的指针中接受这样的东西)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 15:41:00

不能存储指向具有捕获的函式的原始函数指针。相反,您可以做的是存储类型擦除的函子,而不更改其他任何内容:

代码语言:javascript
运行
复制
 typedef std::function<void()> lpvFunc;

(如果您不在Boost.Function上,也可以使用C++11)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26933538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档