在什么情况下,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:简单的回答是,标准就是这样编写的。