通过std :: function引用的Functor

Jul*_*rra 20 c++ c++11 std-function

基本上,我想有以下语义:

#include <functional>
#include <iostream>

class test
{
  public:
    void add(std::function<void()> f)
    {
      f();
    }

    void operator()()
    {
      ++x;
    }

    int x = 33;
};

int main()
{
  test t;
  t.add(t);
  // wanted: x == 34 instead: x == 33 since add(t) copies it
}
Run Code Online (Sandbox Code Playgroud)

我理解std :: function包装了一个可调用对象的副本,但有没有办法使用std :: function获取对可调用对象的引用?

rha*_*oto 23

您希望使用std::ref模板函数为您的实例创建引用包装器:

std::reference_wrapper 是一个类模板,它在可复制的可分配对象中包装引用.

功能模板refcref是生成类型的对象的辅助功能std::reference_wrapper,使用模板参数推导来确定结果的模板参数.

你会像这样使用它:

t.add(std::ref(t));
Run Code Online (Sandbox Code Playgroud)