Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在成员函数中创建函子而不将类作为参数_C++_Boost_Bind_Functor - Fatal编程技术网

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);