C++ 是否可以将模板生成的函数作为f()和f<;T>;()?

C++ 是否可以将模板生成的函数作为f()和f<;T>;()?,c++,c++11,C++,C++11,是否可以将从模板生成的函数设置为f()和f() 我希望在大多数情况下使用指定的类型调用f,例如: f<string>(); f<int>(); 而未指定的类型应为字符串。这可能吗?#包括 #include <string> template <typename T=std::string> void f() {} int main() { f(); } 模板 void f(){} int main() { f(); } #包括 模板 v

是否可以将从模板生成的函数设置为
f()
f()

我希望在大多数情况下使用指定的类型调用f,例如:

f<string>();
f<int>();
而未指定的类型应为字符串。这可能吗?

#包括
#include <string>

template <typename T=std::string>
void f() {}

int main()
{
  f();
}
模板 void f(){} int main() { f(); }
#包括
模板
void f(){}
int main()
{
f();
}
模板
void f(){…}
void f(){f();}
模板
void f(){…}
void f(){f();}

您可以为模板参数指定默认类型:

template<class T=std::string>
foo()

您可以为模板参数指定默认类型:

template<class T=std::string>
foo()


但是您仍然必须使用
f()
IIRC。是的,但是在没有指定类型的情况下调用它时,我必须说f()?也就是说,我必须包括尖括号吗?但是你仍然必须使用
f()
IIRC。是的,但是在没有指定类型的情况下调用它时,我必须说f()?也就是说,我必须包括尖括号吗?你认为
f()
是什么意思?@JanHudec:
f()
显然。@MSalters:你说得对。显然,阅读失败。那么你认为
f()
是什么意思?@JanHudec:
f()
显然。@MSalters:你是对的。显然,阅读失败了。其他人说我不能那样做!我想知道他们为什么这么说。这个简单的例子有效:请注意,这是从C++11开始才允许的。我添加了一个来自标准的引用。其他人说我不能这样做!我想知道他们为什么这么说。这个简单的例子有效:请注意,这仅在C++11之后才被允许。我添加了一个来自标准的引用。不会从模板生成,这很重要。例如,模板可能是一个朋友,但重载将不是。为True,但由于重载只是调用模板,因此这不重要。您可能可以构造一个实例,但在实际编程中是否可能发生这种情况是另一个问题。不会从模板生成,这很重要。例如,模板可能是一个朋友,但重载将不是。为True,但由于重载只是调用模板,因此这不重要。您可能可以构造一个实际情况,但实际编程中是否可能出现这种情况则是另一个问题。
template<class T=std::string>
foo()
template <class T, class U = double>
void f(T t = 0, U u = 0);
void g() {
    f(1, ’c’);     //f<int,char>(1,’c’)
    f(1);          //f<int,double>(1,0)
    f();           //error: T cannot be deduced
    f<int>();      //f<int,double>(0,0)
    f<int,char>(); //f<int,char>(0,0)
}