提问人:Joseph Garvin 提问时间:10/23/2012 更新时间:10/23/2012 访问量:1879
什么时候应该使用 boost call_traits::p aram_type 而不是通用引用?
When should I use boost call_traits::param_type versus a universal reference?
问:
在 C++98 中,我习惯于在模板函数中使用call_traits来自动选择传递参数的最佳方式,例如:
template<class T>
void foo(typename boost::call_traits<T>::param_type arg)
{
// .. do stuff with arg ..
}
优点是,对于基元,它将通过值传递,而对于更复杂的对象,它将通过引用传递,因此我将拥有尽可能少的开销。C++ 11 现在有一个“通用引用”的概念:
template<class T>
void foo(T&& arg)
{
// .. do stuff with arg ..
}
据我了解,我需要使用通用引用才能使用 std::forward 获得完美的转发,因此如果我打算使用它,选择是明确的。但是当我不打算这样做时,我应该更喜欢哪个?通用参考总是一样好还是更好?
答: 暂无答案
评论
call_traits
call_traits
T