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