我正在學習/學習模板功能專業化規則。我開始使用此功能模板專業化幫助
template<typename T>
std::string toString(const T& t)
{
ostringstream out;
out << t;
return out.str();
}
現在,我想專門它爲const char *
typedef const char* ccharPtr;
template<>
std::string toString(const ccharPtr& s)
{
cout << "in specialization" << endl; // just to let me know
return std::string(s);
}
我想要做的,沒有一個typedef,但到目前爲止,我想不通出來。
該特化適用於const char *,但不適用於char *。
const char* s1 = "Hi"
cout << toString(s1); // works
char s2[] = "There";
cout << toString(s2); // doesn't work, since s2 isn't const char*
cout << toString(", Bob"); // doesn't work. Why not?
我想單個專業化爲每個案件工作,但無法解決它。
是的,它會工作取代
strcpy
,但我想學習模板特殊化。我知道這是一種人爲的情況。 – John所以我想你可能不得不專門爲const char *和char *一次。由於char *不是const char *,我猜C++不符合專業化,並使用更通用的功能。如果你想讓const char *和char *都使用相同的特化,我想你必須明確地將你的參數從char *轉換爲const char *。 – neodelphi
@John:你應該學習模板專業化的第一件事情之一是函數模板專業化很少有幫助。 – aschepler