首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将在boost::bind中使用的函数指针的类型

将在boost::bind中使用的函数指针的类型
EN

Stack Overflow用户
提问于 2013-06-21 19:49:42
回答 2查看 185关注 0票数 1

我正在围绕websocket++库做一个消息库。这个库允许我设置自己的函数来管理消息。因为我不是在做将使用我的代码的最终应用程序,所以我还需要允许我的用户为这个处理程序设置他们想要的函数。

这就是它现在的工作方式。在某个地方有一个socket(m_client)类,它有一个set_handler函数,它的用法类似于下面的代码片段。

代码语言:javascript
运行
复制
m_client.set_message_handler(bind(&myFunction,&m_client,_1,_2));

我想要做的是提供一个函数,它将作为参数&myFunction,所以用户只需调用如下代码:

代码语言:javascript
运行
复制
my_class.set_msg_handler(&myFunction);

然后这将是一个声明:

代码语言:javascript
运行
复制
void set_msg_handler(<type> myfunction){
    m_client.set_message_handler(bind(myFunction,&m_client,_1,_2));
}

但我不能明确哪个是myfunction的正确类型,以便让它进行编译。或者这是否是一个很好的归档方法。我看了下boost代码看看能不能得到一些提示...但是当它结束与模板的工作时,这是我还没有管理的东西。

我知道让用户自己进行绑定并传递其输出会更简单,但m_client不能直接访问,我希望在封装建议时保持这种方式。我想现在这并不是绝对必要的,也许有一天我也会需要它。因此,在学习的提议中,我决定以任何方式问它。

对于这种级别的用法,我在C++上还是个新手,整个函数指针、处理程序和模板在我的实际理解中略显逊色。我读过关于bind用法的文章,但是所有的例子都是关于声明一个函数,然后直接使用bind。

我也搜索了一个类似的问题,但没有找到它,如果它存在。我不会放弃我的方法不是最好的或完全错误的,所以欢迎所有的建议和建议。

EN

Stack Overflow用户

发布于 2013-06-21 20:01:35

boost正在使用模板,也许你应该尝试一下,比如

代码语言:javascript
运行
复制
template <typename T>
void set_msg_handler(T myfunction){
    m_client.set_message_handler(bind(myFunction,&m_client,_1,_2));
}

但是如果你想强迫用户给出某种函数,你可以检查模板的专门化。

但是bind几乎可以接受任何类型的指针。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17234541

复制
相关文章

相似问题

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