在什么情况下,C++函数中允许模板参数缺失? 是C++代码,为什么行3有一个错误:
使用的模板结构和不带模板参数在什么情况下,C++函数中允许模板参数缺失? 是C++代码,为什么行3有一个错误:,c++,templates,static,struct,C++,Templates,Static,Struct,使用的模板结构和不带模板参数 template<class T> void foo(T op1, T op2) { cout<< "op1 = " << op1 << endl; cout<< "op2 = " << op2 << endl; } template<class T> struct sum { static void foo(T op1 , T op2)
template<class T> void foo(T op1, T op2)
{
cout<< "op1 = " << op1 << endl;
cout<< "op2 = " << op2 << endl;
}
template<class T>
struct sum
{
static void foo(T op1 , T op2)
{
cout << "sum is " << op1 << endl;
}
};
int main()
{
foo(1,3); // line 1
foo<int>(1, '3'); // line 2
sum::foo(1,2); // line 3
return 0;
}
第1行没有模板参数,但没有错误
谢谢 第3行尝试使用类模板的成员 编译器至少可以/将尝试推断函数模板参数的类型。在少数情况下,它无法推断类型,因此需要显式指定它 编译器不会尝试推断类模板参数的类型
因此,第3行需要类似于sum::foo1,2;。sum本身只是类模板的名称,而不是类的名称。::前面的名称必须是类或命名空间的名称。第3行试图使用类模板的成员 编译器至少可以/将尝试推断函数模板参数的类型。在少数情况下,它无法推断类型,因此需要显式指定它 编译器不会尝试推断类模板参数的类型
因此,第3行需要类似于sum::foo1,2;。sum本身只是类模板的名称,而不是类的名称。::前面的名称必须是类或命名空间的名称。1模板参数推断2解释性模板参数3无模板参数-错误搜索模板参数推断并从标准中读取14.8.2-您需要的所有信息都在那里。1模板参数推断2解释性模板参数3无模板参数-错误搜索模板参数推断并阅读标准中的14.8.2-您需要的所有信息都在那里。好吧,从来没有像现在这样。为C++的未来迭代提出了允许模板参数推导的构造函数语法。基本上,不需要编写太多的foo make_foo blah b函数。@user2420472:简单的回答是,这就是标准的编写方式。现在还没有。为C++的未来迭代提出了允许模板参数推导的构造函数语法。基本上,不需要编写太多的foo make_foo blah b函数。@user2420472:简单的回答是,标准就是这样编写的。