处理值和指针的函数模板
function templates dealing with values and pointers
如果我有一个函数模板,它有一个按值或引用的模板参数,比如
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);
}
但正如我所说,这当然取决于你的整个项目。
这取决于您的项目。至于我,我会使用第一种变体。以下是一些原因:
- 若我们传递指针,我们应该记住它可以是NULL。但是,这个函数应该对所提供参数的有效性负责吗?如果函数是一个工具,那么它应该与值一起工作,参数的有效性与它无关。我想,只有当我需要明确表示函数接受值或不接受值时,我才会使用第二个变体。如果您的函数只期望值,那么为什么要给它增加额外的检查呢
- 您总是可以传递取消引用的指针,如果您使用任何智能指针,您不关心如果存储的指针为NULL该怎么办,因为如果您尝试取消引用NULL指针,所有标准智能指针都会抛出异常
相关文章:
- 如何制作指向模板函数的指针?
- 指向成员函数的模板指针 - getter
- 指向模板上下文中的成员函数或静态函数的指针
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 如何声明指向成员模板函数的指针?
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 努力将指向成员函数的指针绑定到类模板的T成员,然后在槽中调用
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- C++成员函数模板将成员函数指针作为模板参数
- 使用通用函数指针参数化函数模板的简洁方法
- 带有指向成员函数的指针的模板 =VC++ 2017 和 gcc 5.1 的>不同的错误消息
- 如何获取指向已推断的模板函数的指针?
- 将常量添加到函数模板指针参数
- 使用原始指针作为参数的函数模板推导
- 从具有迭代器参数的模板函数返回指针
- 是否可以从指向成员函数模板参数的指针推断类类型
- 打印函数模板的内容进行类指针
- 接受指向类成员函数的指针的模板参数
- 类型定义模板,接受指向常量和非常量函数的指针
- 字符串和指向模板化函数的指针的映射