C++ 对std::function对象的调用不匹配,该对象是指向成员函数的指针

C++ 对std::function对象的调用不匹配,该对象是指向成员函数的指针,c++,function-pointers,std-function,member-functions,C++,Function Pointers,Std Function,Member Functions,我想要一个类保存一个指向另一个类的成员函数的函数指针 但当我尝试使用函数指针调用该成员函数时,得到的是错误: 对“(const std::function)()的调用不匹配” 我不使用原始函数指针,而是使用std::function对象,因为如果要指向成员函数(它们需要引用我调用的成员函数的类的实例),这是一种方法 我的第一节课是: class Condition : public ICondition { public: Condition(std::function<bool

我想要一个类保存一个指向另一个类的成员函数的函数指针

但当我尝试使用函数指针调用该成员函数时,得到的是错误:

对“(const std::function)()的调用不匹配”

我不使用原始函数指针,而是使用
std::function
对象,因为如果要指向成员函数(它们需要引用我调用的成员函数的类的实例),这是一种方法

我的第一节课是:

class Condition : public ICondition
{
public:

    Condition(std::function<bool(Cache&)> cacheGetMethod, bool value)
    {
        m_getter = cacheGetMethod;
        m_value = value;
    }

    virtual bool check() const
    {
        // this is where I get the error, so the way I call the std::function object is wrong?
        return m_getter() == m_value;
    }

    virtual ~Condition() {}

private:
    std::function<bool(Cache&)> m_getter;
    bool m_value;
};
下面是我如何在我的主要功能中使用它:

std::shared_ptr<Cache> cache = std::make_shared<Cache>();

std::vector<ICondition*> conditions;
conditions.push_back(new Condition(std::bind(&Cache::getLamp, cache), true));
std::shared_ptr cache=std::make_shared();
std::向量条件;
条件。推回(新条件(std::bind(&Cache::getLamp,Cache),true);
因此,我想使用的一个条件基本上检查灯的值是否为真

std::function<bool(Cache&)> m_getter;
现在,您可以将其称为
m_getter()
,并将使用随
std::bind
提供的
Cache
对象

std::function<bool(Cache&)> m_getter;

现在您可以将其称为
m_getter()
,并且将使用您为
std::bind
提供的
Cache
对象。

这里
std::function
您说该函数采用
缓存&
。为什么不将
缓存
传递给它呢?我很确定,这也不是如何将实例绑定到成员函数,因为隐式实例参数是指针(即它是
this
)。编辑:根据我的dupe建议,我收回它:“
std::bind()
足够聪明,可以使用任何看起来像指针的东西,任何可以转换为适当类型的引用的东西(比如
std::reference\u wrapper
),或者当第一个参数是指向成员的指针时,对象的[副本]作为对象。”此处
std::function
可能存在重复,您说该函数需要
缓存&
。为什么不将
缓存
传递给它呢?我很确定,这也不是如何将实例绑定到成员函数,因为隐式实例参数是指针(即它是
this
)。编辑:根据我的dupe建议,我收回它:“
std::bind()
足够聪明,可以使用任何看起来像指针的东西,任何可以转换为适当类型的引用的东西(比如
std::reference\u wrapper
),或者当第一个参数是指向成员的指针时,对象的[copy]作为对象。”
std::function<bool()> m_getter;