可变参数函数模板基本情况:没有参数还是有参数?
Variadic function template base case: without parameters or with one?
我想知道这些(如果有的话)选项中的哪一个是首选。
例如,我正在实现一个接受任意数量参数的求和函数。然后是主模板
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;
}
在这种情况下,这两种方法似乎都以相同的方式工作,但通常首选哪一种?
第二种情况比引入 int
的选项 1 更通用。
即:使用第二个选项,您可以 sum
一些矩阵 class,而第一个选项不允许这样做。 (不过,您应该通过 const 引用来论证,以便对矩阵情况有效)。
通过引入 int
,在某些情况下您也有不同的 return 类型
auto res = sum('*');
这导致选项 1 的类型为 int
,选项 2 的类型为 char
我想知道这些(如果有的话)选项中的哪一个是首选。
例如,我正在实现一个接受任意数量参数的求和函数。然后是主模板
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; }
在这种情况下,这两种方法似乎都以相同的方式工作,但通常首选哪一种?
第二种情况比引入 int
的选项 1 更通用。
即:使用第二个选项,您可以 sum
一些矩阵 class,而第一个选项不允许这样做。 (不过,您应该通过 const 引用来论证,以便对矩阵情况有效)。
通过引入 int
,在某些情况下您也有不同的 return 类型
auto res = sum('*');
这导致选项 1 的类型为 int
,选项 2 的类型为 char