ref的目的是对于一个模板函数,在传和传引用都可以的时候,把的权利下放给使用者。在参数上套一个ref(),显式告诉编译器这里引用传递,否则就是值传递。
例:
#include <iostream>
#include <boost/ref.hpp>
using namespace std;
using namespace boost;
struct QQ
{
int k;
};
template <typename T> int foo(T a)
{
typedef unwrap_reference<T>::type& truetype;
truetype k = a; k.k = 10; return 0;
}
int main()
{
QQ huxw;
foo(ref(huxw));
cout << huxw.k << endl;
huxw.k = 11; foo(huxw);
cout << huxw.k << endl;
return 0;
}
本文通过一个具体的C++示例介绍了如何使用Boost库中的ref和unwrap_reference来控制模板函数中对象的传递方式。通过ref可以明确地告诉编译器采用引用传递而非值传递,这对于大型对象或者复杂的类实例来说尤为重要。
1144

被折叠的 条评论
为什么被折叠?



