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是一个类模板,它在可复制的可分配对象中包装引用.功能模板
ref和cref是生成类型的对象的辅助功能std::reference_wrapper,使用模板参数推导来确定结果的模板参数.
你会像这样使用它:
t.add(std::ref(t));
Run Code Online (Sandbox Code Playgroud)