是否可以调用std :: invoke使其可以与函数指针一起使用?

时间:2019-01-21 18:41:38

标签: c++

如果我有一个类Entity,并且它具有名为entityGetter的getter函数和setter函数entitySetter

我想将成员函数应用于Entity参数化的value对象,我会做类似的事情

Entity e;
std::invoke(&Entity::entitySetter, e, someValue);

这个想法等同于

    e.entitySetter(someValue);

我想做的是制作一个函数,将其进一步概括为这样的东西

void addHelper (  int value
                , Entity& e
                , std::function<int (Entity&)> getFunc
                , std::function<void (Entity&, int)> setFunc
                ) {

  std::invoke(setFunc, e, getFunc_(value)); 

// getFunc_ returns an int. Just a wrapper around e.getFunc () * value

使用

调用时
  1. 一个值

  2. Entity对象引用

  3. 包裹在lambda函数中的吸气剂函数getFunc

  4. setter函数setFunc也包装在lambda函数中

将在对象getFunc_上调用e,并使用该值在e中进行设置。

问题是我没有足够的C ++经验来弄清楚为什么上面的示例不起作用。

1 个答案:

答案 0 :(得分:0)

由于@NathanOliver的评论,我得以解决此问题。

这就是我以前尝试过的

void addHelper (  int value
                , Entity& e
                , std::function<int (Entity&)> getFunc
                , std::function<void (Entity&)> setFunc
                ) {

  std::invoke(setFunc, e, getFunc_(value)); 

// getFunc_ returns an int. Just a wrapper around e.getFunc () * value

参数

std::function<void (Entity&)> setFunc

仅接受Entity对象引用。什么都没设置。

应该这样定义

std::function<void (Entity&, int)> setFunc

因此它需要一个对象以及一个