C++;boost::bind和boost::function、类成员函数回调和运算符==。我做错了什么?
我在使用boost::bind和boost::function以及将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
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++的方法。