如果我有一个功能模板,其模板参数按值或参考
template<class T> void DoSomething(T& t){ t.method();}
如果我想处理指针或智能指针,那么最好首先进行derefernce,以便代码工作或编写委托函数,如
template<class T> void DoSomething(T* t){ Dosomething(*t);}
答案 0 :(得分:0)
像所有“最好的”问题一样,答案是“它取决于”。会有辩论和意见。
但是,我建议使用第二种方法。原因是,您可以在函数的第二种形式中添加额外的检查。例如:
template<class T> void DoSomething(T* t)
{
if (t == NULL)
give_error_somewhere();
else
Dosomething(*t);
}
但就像我说的那样,这肯定取决于你的整个项目。
答案 1 :(得分:0)
这取决于您的项目。至于我,我会使用第一个变体。以下是一些原因: