参考:
http://en.cppreference.com/w/...
如果仅仅因为引用
是不支持copy/move的,那么可以直接用指针代替啊.
比如:
//std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
std::vector<int *> v;
for(auto &lnum : l) {
v.push_back(&lnum);
}
update20181107:
除了引用使用起来比较方便之外,在std::bind
如果包装了一个入参为引用的函数, 那么为了不改变入参的属性, 就需要用std::ref
(返回值就是std::reference_wrapper
)来包装了:
#include <iostream>
#include <functional>
void foo(int &a) {
++a;
}
void test_func(std::function<void(void)> fun) {
fun();
}
int main()
{
int a = 1;
std::cout<<"a="<<a<<"\n";
// 用std::bind绑定参数a, 这个时候传值, 函数的调用已经和外层没有什么关系了.
test_func(std::bind(foo, a));
std::cout<<"a="<<a<<"\n";
// a 仍然保留引用的属性, ++a
test_func(std::bind(foo, std::ref(a)));
std::cout<<"a="<<a<<"\n";
// lambda表达式把要包装的函数 foo 显式化,a传入直接就是引用. ++a
test_func([&](){foo(a);});
std::cout<<"a="<<a<<"\n";
}
可以阿,
reference_wrapper
也只是提供一个使用上可能性而已,毕竟按理说c++
中所有使用引用的地方不都是可以使用指针替代么?