【发布时间】:2018-02-09 12:04:22
【问题描述】:
#include <iostream>
#include <string>
template<int T, int U>
void foo(T a, U b)
{
std::cout << a+b << std::endl;
}
int main() {
foo(2,4);
return 0;
}
我收到以下错误:
错误:变量或字段 'foo' 声明为 void
错误:在 'a' 之前应为 ')'
错误:在 'b' 之前应为 ')'
在函数'int main()'中: 错误:“foo”未在此范围内声明
【问题讨论】:
-
模板不是这样工作的。您的模板参数是类,或
typenames,而不是ints。 -
@SamVarshavchik 如果我想指定两个参数都是
ints 怎么办?显然,我可以只创建一个标准函数,但是可以使用模板来完成吗? -
由于
T不是类型,foo不能是函数。因此,它必须是一个变量,而void不是变量的有效类型。 (注意template<int T> int variable(T);是 C++14 中的有效声明。) -
@grizloni97 如果要指定两个参数都是
int,则不应使用模板函数。 -
如果你希望两个参数都是
int,你只需声明一个带有两个 int 参数的普通函数。就是这样。这就是普通函数的用途。这不是模板的用途。