c++ Boost信号连接模板中两个不同类的两个函数
C++ Boost Signals connecting two functions from two different classes in template
我试图在一个类中的函数之间建立连接,以便我可以在另一个类中调用它。我找到的答案要么太具体,要么可能我错过了一些东西,因为我一辈子都不知道我做错了什么。此外,我对boost库有点陌生,所以请原谅我可能会问的任何愚蠢的问题。
我的工作流程的设置基本上是这样的…
class MyClass : public BaseClass {
void setup();
void myFunc(datatype);
OtherClass myOtherClass;
}
void setup()
{
OtherNamespace::addListener(this, myOtherClass);
}
namespace OtherNamespace {
class OtherClass {
signals::signal<void (datatype)> myConnection;
}
template<class A, class B>
void addListener(A * app, B & connection)
{
connection.myConnection.connect( 'I don't know what to do here' );
}
}
基本上,addlistener函数不会在信号和函数之间建立连接。我知道我不知道该怎么做,我做错了什么,但我就是不知道哪里错了。我把它作为一个辅助函数,这样我就可以把函数从一个类传递到另一个类,然后在它们被附加时调用它们。我试图从一个websocket连接创建一个多米诺骨牌事件,我显然错过了一些非常重要的东西。如有任何帮助,我将不胜感激。
我在xcode和boost和macbook pro上。
您应该连接到与slot
匹配的signal
a,这是一个具有适当签名的可调用。最好的解决方案是将插槽创建留给addListener
函数的调用者(以下是您的代码,以SSCCE形式):
#include <boost/signals2.hpp>
typedef int datatype;
class BaseClass
{};
namespace OtherNamespace
{
class OtherClass
{
public:
boost::signals2::signal<void (datatype)> myConnection;
};
template<class A, class B>
void addListener(A app, B & connection)
{
connection.myConnection.connect(app);
}
}
class MyClass : public BaseClass
{
public:
void setup();
void myFunc(datatype)
{}
OtherNamespace::OtherClass myOtherClass;
};
void MyClass::setup()
{
// let the caller decide how to make the slot
OtherNamespace::addListener(boost::bind(&MyClass::myFunc, this, _1), myOtherClass);
}
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何设置一个 std::vector 与另一个,其中两个是不同类的向量?
- 从两个不同类继承的非虚拟基类的访问成员
- 使用转换运算符相互转换两个不同类的对象
- 两个不同类的运行时多态性
- 如何比较两个不同类的对象
- 具有两个不同类的两个不同构造函数
- 如何在具有相同基类的两个不同类中获取向量
- 两个不同类的泛型函数
- 检查来自不同类的两个Rect之间的冲突
- c++中包含两个不同类的对象的列表
- 比较来自两个不同类的对象
- c++ Boost信号连接模板中两个不同类的两个函数
- 等同c++中来自不同类的两个对象
- 重载指向两个不同类的指针的赋值运算符
- 如何锁定由属于两个不同类的两个线程修改的数据结构