C++ 在成员函数中创建函子而不将类作为参数
为神秘的解密道歉 我希望创建以下类型的函子:C++ 在成员函数中创建函子而不将类作为参数,c++,boost,bind,functor,C++,Boost,Bind,Functor,为神秘的解密道歉 我希望创建以下类型的函子: const boost::function<bool ()>& functor 常量boost::函数与函子 请考虑类: #include <boost/function.hpp> class X { public: bool foo(); void bar() ; }; void X::bar() { const boost::function<bool
const boost::function<bool ()>& functor
常量boost::函数与函子
请考虑类:
#include <boost/function.hpp>
class X {
public:
bool foo();
void bar() ;
};
void X::bar() {
const boost::function<bool (X *)>& f = &X::foo;
}
bool X::foo() {
std::cout << __func__ << " " << __LINE__ << " " << std::endl;
return true;
}
#包括
类X{
公众:
bool-foo();
空心钢筋();
};
void X::bar(){
常量boost::function&f=&X::foo;
}
boolx::foo(){
std::cout必须使用对象调用非静态成员函数。因此,您必须始终隐式地传递此
指针作为其参数
您可以通过boost::bind
实现这一点:
const boost::function<bool()>& f = boost::bind(&X::foo, this);
const boost::function&f=boost::bind(&X::foo,this);
为什么要对boost函数使用const引用?引用生存期延长通常会起作用,但为临时对象而不是实际对象创建别名似乎毫无意义地脆弱?@Yakk同意。我的错误。其他信息:使用此技术意味着对象(*此)将比函数对象(f)存在更长的时间。使用boost::shared_ptr作为参数而不是此参数来确保这一点是一种常见的习惯用法。您好@Dale,谢谢。我正试图通过以下方式来实现这一点:
const boost::function<bool ()>& f = &X::foo;
const boost::function<bool()>& f = boost::bind(&X::foo, this);