作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
基本上,我希望有以下语义:
#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
}
我了解 std::function 包装了可调用对象的拷贝,但有没有办法使用 std::function 获取对可调用对象的引用?
最佳答案
您想使用 std::ref
模板函数创建reference wrapper对于您的实例:
std::reference_wrapper
is a class template that wraps a reference in a copyable, assignable object.Function templates
ref
andcref
are helper functions that generate an object of typestd::reference_wrapper
, using template argument deduction to determine the template argument of the result.
你会这样使用它:
t.add(std::ref(t));
关于c++ - 通过 std::function 引用仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24336790/
我是一名优秀的程序员,十分优秀!