可变函数模板基本情况:不带参数或带参数
Variadic function template base case: without parameters or with one?
我想知道这些选项中的哪一个(如果有的话)是首选。
例如,我正在实现一个接受任意数量参数的sum函数。主模板是
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
一些矩阵类,而第一个选项不允许这样做。(你应该通过const引用来获取参数,以便在矩阵情况下有效)。
通过引入int
,您还可以在某些情况下获得不同的返回类型
auto res = sum('*');
选项1为int
类型,选项2为char
类型
相关文章:
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 具有常量引用参数的函数模板专用化
- 使用可变参数函数作为模板参数
- std::span<const T> 作为函数模板中的参数
- 如何在C++中伪造虚拟可变参数函数模板?
- C++ std::functional 中的可变参数函数模板
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 三个参数函数模板令人困惑的示例
- 父可变参数函数模板专门用于子级
- C++如何将可变参数函数模板的参数包 -> 包装到 lambda 中
- 将函数传递给可变参数函数模板
- 为什么可变参数函数模板中的这个 constexpr 不是常数?
- 将多个初始值设定项列表传递到可变参数函数模板时遇到问题
- 依赖类型不明确的 c++11 可变参数函数模板重载是否不明确
- 操作可变参数函数模板的函数参数
- C++11 中的非类型可变参数函数模板
- 将可变参数函数模板的每个参数传递给返回void的函数
- 包扩展不在最后一个参数中的可变参数函数模板
- 将可变参数函数模板参数存储到联合向量中的最有效方法
- Clang 和 GCC 在解决可变参数函数模板重载时的行为不同