与指向成员函数指针的 std::function 对象的调用不匹配
No match for call to std::function object which is pointer to member function
我想要一个 class 来保存指向另一个 class 的成员函数的函数指针。
但是我在尝试使用函数指针调用该成员函数时得到的是错误:
No match for call to '(const std::function<bool(PropertyCache&)>) ()'
我不使用原始函数指针,而是使用 std::function
对象,因为如果您想指向成员函数(它们需要引用 class 的实例,这是可行的方法我称之为成员函数)。
所以我的第一个 class 如下:
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;
};
它也是一个抽象基础class的子class,但我想这目前并不重要。
基本上,条件保存指向缓存 class 的 getter 的函数指针,然后获取最新值并将其与给定值进行比较。
缓存 class 看起来像这样:
class Cache
{
public:
void setIsLampOn(bool isOn);
bool getIsLampOn() const;
private:
bool m_isLampOn;
};
然后这是我在主要功能中使用它的方式:
std::shared_ptr<Cache> cache = std::make_shared<Cache>();
std::vector<ICondition*> conditions;
conditions.push_back(new Condition(std::bind(&Cache::getLamp, cache), true));
所以我想使用的一个条件基本上是检查 lamp 的值是否为真。
有
std::function<bool(Cache&)> m_getter;
你说 "function" 对象 m_getter
需要引用 Cache
对象作为参数。
虽然您需要将 Cache
对象传递给您调用的函数(setIsLampOn
或 getIsLampOn
)是正确的,但是您在对 [=17= 的调用中设置了该对象].
对于当前的 m_getter
,您需要将其命名为 m_getter(SomeCacheObject)
。
你不应该 m_getter
需要一个参数:
std::function<bool()> m_getter;
现在您可以将其称为 m_getter()
,并且将使用您随 std::bind
提供的 Cache
对象。
我想要一个 class 来保存指向另一个 class 的成员函数的函数指针。
但是我在尝试使用函数指针调用该成员函数时得到的是错误:
No match for call to '(const std::function<bool(PropertyCache&)>) ()'
我不使用原始函数指针,而是使用 std::function
对象,因为如果您想指向成员函数(它们需要引用 class 的实例,这是可行的方法我称之为成员函数)。
所以我的第一个 class 如下:
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;
};
它也是一个抽象基础class的子class,但我想这目前并不重要。 基本上,条件保存指向缓存 class 的 getter 的函数指针,然后获取最新值并将其与给定值进行比较。
缓存 class 看起来像这样:
class Cache
{
public:
void setIsLampOn(bool isOn);
bool getIsLampOn() const;
private:
bool m_isLampOn;
};
然后这是我在主要功能中使用它的方式:
std::shared_ptr<Cache> cache = std::make_shared<Cache>();
std::vector<ICondition*> conditions;
conditions.push_back(new Condition(std::bind(&Cache::getLamp, cache), true));
所以我想使用的一个条件基本上是检查 lamp 的值是否为真。
有
std::function<bool(Cache&)> m_getter;
你说 "function" 对象 m_getter
需要引用 Cache
对象作为参数。
虽然您需要将 Cache
对象传递给您调用的函数(setIsLampOn
或 getIsLampOn
)是正确的,但是您在对 [=17= 的调用中设置了该对象].
对于当前的 m_getter
,您需要将其命名为 m_getter(SomeCacheObject)
。
你不应该 m_getter
需要一个参数:
std::function<bool()> m_getter;
现在您可以将其称为 m_getter()
,并且将使用您随 std::bind
提供的 Cache
对象。