我想知道哪一个(如果有的话)选项会更受欢迎。
例如,我实现了一个带有任意数量参数的求和函数。那么主模板是
template <typename T, typename... Ts>
auto sum(T t, Ts... ts)
{
return t + sum(ts...);
}
对于基本情况,我至少可以看到两个选项:
基本情况是sum():
auto sum()
{
return 0;
}
基本情况是sum(T):
template <typename T>
auto sum(T t)
{
return t;
}
在这种情况下,这两种似乎都以相同的方式工作,但通常首选哪一种?
答案 0 :(得分:4)
第二种情况比引入int
的选项1更通用。
ie:使用你的第二个选项,你可以sum
一些矩阵类,而第一个不允许这样。 (你应该通过const引用来获取对矩阵情况有效的参数。)
通过引入int
,对于某些情况,您还有不同的返回类型
auto res = sum('*');
导致选项1的int
类型和选项2的char
类型