小编Ric*_*rdo的帖子

当模板函数按特定顺序放置时,代码无法编译

以下程序编译成功。

template<typename T>
T sum(T x) {
    return x;
}

template<typename T, typename... Args>
T sum(T x, Args... args) {
    return x + sum(args...);
    
}

int main() {
    sum(1, 2, 3, 4, 5);

}
Run Code Online (Sandbox Code Playgroud)

但是,当我切换模板函数的编写顺序时,它不再编译:

template<typename T, typename... Args>
T sum(T x, Args... args) {
    return x + sum(args...);

}

template<typename T>
T sum(T x) {
    return x;
}

int main() {
    sum(1, 2, 3, 4, 5);

}
Run Code Online (Sandbox Code Playgroud)

我得到的编译器错误是:

错误 C2780:“T sum(T,Args...)”:需要 2 个参数 - 提供 0 个,消息:请参阅“sum”的声明

为什么会出现这种情况?这两个函数在 main() …

c++ templates variadic-templates

25
推荐指数
1
解决办法
1396
查看次数

标签 统计

c++ ×1

templates ×1

variadic-templates ×1