我正在研究函數的模板。爲了簡化,說它看起來像這樣:C++模板C字符串參數
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字符串」的情況下,所以我只寫了另一個模板功能的專業化:
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字符串允許成爲模板參數,當我讀過的時候說它不能是。我一定誤解/誤解了有關模板的內容。
可能重複:http://stackoverflow.com/questions/6973040/specialize-a-void-function-template-to-a-const-charn – 2013-03-28 04:51:09