我正在围绕websocket++库做一个消息库。这个库允许我设置自己的函数来管理消息。因为我不是在做将使用我的代码的最终应用程序,所以我还需要允许我的用户为这个处理程序设置他们想要的函数。
这就是它现在的工作方式。在某个地方有一个socket(m_client)类,它有一个set_handler函数,它的用法类似于下面的代码片段。
m_client.set_message_handler(bind(&myFunction,&m_client,_1,_2));我想要做的是提供一个函数,它将作为参数&myFunction,所以用户只需调用如下代码:
my_class.set_msg_handler(&myFunction);然后这将是一个声明:
void set_msg_handler(<type> myfunction){
m_client.set_message_handler(bind(myFunction,&m_client,_1,_2));
}但我不能明确哪个是myfunction的正确类型,以便让它进行编译。或者这是否是一个很好的归档方法。我看了下boost代码看看能不能得到一些提示...但是当它结束与模板的工作时,这是我还没有管理的东西。
我知道让用户自己进行绑定并传递其输出会更简单,但m_client不能直接访问,我希望在封装建议时保持这种方式。我想现在这并不是绝对必要的,也许有一天我也会需要它。因此,在学习的提议中,我决定以任何方式问它。
对于这种级别的用法,我在C++上还是个新手,整个函数指针、处理程序和模板在我的实际理解中略显逊色。我读过关于bind用法的文章,但是所有的例子都是关于声明一个函数,然后直接使用bind。
我也搜索了一个类似的问题,但没有找到它,如果它存在。我不会放弃我的方法不是最好的或完全错误的,所以欢迎所有的建议和建议。
发布于 2013-06-21 20:01:35
boost正在使用模板,也许你应该尝试一下,比如
template <typename T>
void set_msg_handler(T myfunction){
m_client.set_message_handler(bind(myFunction,&m_client,_1,_2));
}但是如果你想强迫用户给出某种函数,你可以检查模板的专门化。
但是bind几乎可以接受任何类型的指针。
https://stackoverflow.com/questions/17234541
复制相似问题