Variadic函数模板基本情况:没有参数或者有一个?

时间:2015-07-20 10:02:39

标签: c++ c++11 variadic-templates c++14 variadic-functions

我想知道哪一个(如果有的话)选项会更受欢迎。

例如,我实现了一个带有任意数量参数的求和函数。那么主模板是

template <typename T, typename... Ts>
auto sum(T t, Ts... ts)
{
    return t + sum(ts...);
}

对于基本情况,我至少可以看到两个选项:

  1. 基本情况是sum():

    auto sum() 
    { 
        return 0; 
    }
    
  2. 基本情况是sum(T):

    template <typename T>
    auto sum(T t)
    {
        return t;
    }
    
  3. 在这种情况下,这两种似乎都以相同的方式工作,但通常首选哪一种?

1 个答案:

答案 0 :(得分:4)

第二种情况比引入int的选项1更通用。

ie:使用你的第二个选项,你可以sum一些矩阵类,而第一个不允许这样。 (你应该通过const引用来获取对矩阵情况有效的参数。)

通过引入int,对于某些情况,您还有不同的返回类型

auto res = sum('*');

导致选项1的int类型和选项2的char类型