C++;boost::bind和boost::function、类成员函数回调和运算符==。我做错了什么?

C++;boost::bind和boost::function、类成员函数回调和运算符==。我做错了什么?,function,boost,callback,bind,Function,Boost,Callback,Bind,我在使用boost::bind和boost::function以及将boost::function作为回调传递到另一个类时遇到了问题 下面是一个有问题的例子: typedef boost::function<void (bool)> callbackFunction; class HasCallback { public: HasCallback() : value(0) { } int value; void CallBackFunction(bool change

我在使用boost::bind和boost::function以及将boost::function作为回调传递到另一个类时遇到了问题

下面是一个有问题的例子:

typedef boost::function<void (bool)> callbackFunction;

class HasCallback
{
public:
 HasCallback() : value(0)
 {
 }

 int value;

 void CallBackFunction(bool changed)
 {
  std::cout << "HasCallback class. CallBackFunction called. Parameter: " << value << std::endl;
 }
};

class ReceivesCallback 
{

public:
 void AddCallback(callbackFunction newFunc)
 {
  callbacks.push_back(newFunc);
 }

 void execute(int &i)
 {
  for(std::vector<callbackFunction>::iterator it = callbacks.begin(); it != callbacks.end(); it++)
  {
   (*it)(i++);
  }
 }

 void RemoveHandler(callbackFunction oldFunc)
 {
  for(std::vector<callbackFunction>::iterator it = callbacks.begin(); it != callbacks.end(); it++)
  {
   if((*it) == oldFunc)
   {
    callbacks.erase(it);
    break;
   }
  }

 }

private:
 std::vector<callbackFunction> callbacks;
};


int main()
{
 HasCallback hc;
 ReceivesCallback rc;
 rc.AddCallback(boost::bind(&HasCallback::CallBackFunction, &hc, _1));
 hc.value = 123;



 HasCallback hc2;
 rc.AddCallback(boost::bind(&HasCallback::CallBackFunction, &hc2, _1));
 hc2.value = 321;

 int a = 0;

 rc.RemoveHandler(boost::bind(&HasCallback::CallBackFunction, &hc2, _1));
 rc.execute(a);
}
typedef boost::function callbackFunction;
类回调
{
公众:
HasCallback():值(0)
{
}
int值;
无效调用函数(布尔值已更改)
{

std::cout有关说明,请参见Boost.Function常见问题解答:

Boost.Functions只提供了一个
Boost::function
与任意函数对象的比较。我相信制作
RemoveHandler
成员函数模板可以解决这个问题:

 template<class Functor>
 void RemoveHandler(const Functor &oldFunc)
 {
     for(std::vector<callbackFunction>::iterator it = callbacks.begin(); it != callbacks.end(); it++)
     {
         if((*it) == oldFunc)
         {
             callbacks.erase(it);
             break;
         }
     }
 }
模板
void removeholder(常量函子和oldFunc)
{
for(std::vector::iterator it=callbacks.begin();it!=callbacks.end();it++)
{
if((*it)==oldFunc)
{
回调。删除(它);
打破
}
}
}

在这里,
oldFunc
可以保留其实际类型,而不必“包装”在
boost::function

中。有关说明,请参见boost.function常见问题解答:

Boost.Functions只提供了一个
Boost::function
与任意函数对象的比较。我相信制作
RemoveHandler
成员函数模板可以解决这个问题:

 template<class Functor>
 void RemoveHandler(const Functor &oldFunc)
 {
     for(std::vector<callbackFunction>::iterator it = callbacks.begin(); it != callbacks.end(); it++)
     {
         if((*it) == oldFunc)
         {
             callbacks.erase(it);
             break;
         }
     }
 }
模板
void removeholder(常量函子和oldFunc)
{
for(std::vector::iterator it=callbacks.begin();it!=callbacks.end();it++)
{
if((*it)==oldFunc)
{
回调。删除(它);
打破
}
}
}

<代码> < OrdFunc得到它的实际类型而不被包装在<代码> Boo::函数 ./P>谢谢,这解决了问题,我知道它是如何工作的。我自己从来没有想过它。我仍然有更多的方法学习C++。谢谢,这解决了问题,我知道它是如何工作的。我永远不会有T。我自己也有。猜我还有更多的学习C++的方法。