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

问题描述 投票:0回答:1

我希望一个类保存指向另一个类的成员函数的函数指针。

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

没有匹配调用'(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;
};

它也是抽象基类的子类,但是我想这现在并不重要。基本上,一个Condition持有指向Cache类的getter的函数指针,然后获取最新值并将其与给定值进行比较。

Cache类看起来像这样:

class Cache
{
public:
    void setIsLampOn(bool isOn);
    bool getIsLampOn() const;

private:
    bool m_isLampOn;
};

然后这就是我在主要功能中的使用方式:

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

std::function<bool(Cache&)> getLamp = std::bind(&yCache::getLamp, cache);
std::vector<ICondition*> conditions;
conditions.push_back(new Condition(std::bind(&Cache::getLamp, cache), true));

所以我要使用的一个条件基本上检查灯的值是否为真。

c++ function-pointers std-function member-functions
1个回答
0
投票

使用

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

您说“功能”对象m_getter需要引用Cache对象作为参数。

虽然正确的是,您需要将Cache对象传递给调用的函数(setIsLampOngetIsLampOn),但在调用中将此对象设置为std::bind

使用当前的m_getter,您需要将其称为m_getter(SomeCacheObject)

您不应该m_getter需要一个参数:

std::function<bool()> m_getter;

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

© www.soinside.com 2019 - 2024. All rights reserved.