C++ C++;连接模板中两个不同类的两个函数的Boost信号

C++ C++;连接模板中两个不同类的两个函数的Boost信号,c++,boost,boost-signals2,C++,Boost,Boost Signals2,我试图在一个类中的函数之间建立连接,以便在另一个类中调用它。我找到的答案要么太具体,要么我错过了一些东西,因为我一辈子都无法找出我做错了什么。另外,我对boost库有点陌生,所以请原谅我可能会问的任何愚蠢的问题 我的工作流程的设置基本上是这样的 class MyClass : public BaseClass { void setup(); void myFunc(datatype); OtherClass myOtherClass; } void setup() {

我试图在一个类中的函数之间建立连接,以便在另一个类中调用它。我找到的答案要么太具体,要么我错过了一些东西,因为我一辈子都无法找出我做错了什么。另外,我对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' );
}
}
class MyClass:公共基类{
无效设置();
void myFunc(数据类型);
另一类;另一类;
}
无效设置()
{
OtherNamespace::addListener(this,myOtherClass);
}
命名空间OtherNamespace{
另一类{
信号::信号连接;
}
模板
void addListener(A*应用程序、B和连接)
{
connection.myConnection.connect('我不知道在这里做什么');
}
}
基本上,addlistener函数不会在信号和函数之间建立连接。我知道在我不知道该做什么的地方我做错了什么,但我就是不知道这是怎么回事。我把它作为一个助手函数,这样我就可以将函数从一个类传递到另一个类,然后在附加函数时调用它们。我试图从websocket连接创建一个domino事件,但我显然遗漏了一些非常重要的内容。任何帮助都将不胜感激


我使用的是xcode、boost和macbook pro。

您应该连接到
信号
一个匹配的
插槽
,这是一个具有适当签名的可调用插槽。最好的解决方案是将插槽创建留给
addListener
函数的调用方(以下是您的代码,格式如下):

#包括
typedef int数据类型;
类基类
{};
命名空间OtherNamespace
{
另一类
{
公众:
boost::signals2::signal myConnection;
};
模板
void addListener(应用程序、B和连接)
{
connection.myConnection.connect(应用程序);
}
}
类MyClass:公共基类
{
公众:
无效设置();
void myFunc(数据类型)
{}
OtherNamespace::OtherClass myOtherClass;
};
void MyClass::setup()
{
//让打电话的人决定如何打电话
OtherNamespace::addListener(boost::bind(&MyClass::myFunc,this,_1),myOtherClass);
}
#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);
}