我正在尝试在一个类中的函数之间建立连接,以便我可以在另一个类中调用它。我发现的答案要么太具体,要么就是我错过了什么,因为我不能为我的生活弄清楚我做错了什么。另外,我对升级库有点新意,所以请原谅我可能会问的任何愚蠢的问题。
我的工作流程的设置基本上就是这个......
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。
答案 0 :(得分:1)
您应该连接到signal
匹配的slot
,这是一个具有相应签名的可调用。最佳解决方案是将广告位创建留给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);
}