我正在研究一个函数的模板。为了简化,假设它看起来像这样:
template < typename T >
void f(const T & x)
{
cout << "generic case" << endl;
cout << x << endl;
}
我一直认为 C 字符串不能用作模板参数参数。但以下实际上有效(使用 g++ 4.5.1):
f("hello world");
所以我的问题是:我什么T
时候打电话f("hello world")
?
我试图专注于看看到底发生了什么。例如,因为char[]
我const char*
看了这个(这显然不起作用):
template < typename T >
void f(const T & x)
{
cout << "generic case" << endl;
cout << x << endl;
}
template <>
void f(const const char * T & x)
{
cout << "char[] case" << endl;
cout << x << endl;
}
并尝试了几种变体。它们都不起作用。
旁白:我的工作并不需要这个。我需要专门针对 T = "C-string" 的情况,所以我只写了另一个模板函数:
template < typename T >
void f(const T & x)
{
cout << "generic case" << endl;
cout << x << endl;
}
template < typename T >
void f(T x[])
{
cout << "T[] case" << endl;
cout << x << endl;
}
我只是在问,因为我很好奇到底发生了什么,为什么当我读到的内容说不能时,为什么允许 C 字符串作为模板参数。我一定误读/误解了一些关于模板的东西。