什么时候我应该使用boost call_traits :: param_type与通用引用?

时间:2012-10-22 16:59:44

标签: c++ performance boost c++11 parameter-passing

在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进行完美转发,所以如果我打算使用它,那么选择是明确的。但是,当我不打算,我应该更喜欢哪一个?通用参考是否会一直好或更好?

0 个答案:

没有答案