3
我希望能夠基於常量c風格的字符串專門化。問題是當我調用我的模板化函數時,類型是const char [N],其中'N'是字符串+1(空字符)的大小。我怎樣才能專注於所有的C風格的字符串?const char數組(c風格字符串)模板專門化
以下代碼顯示了該問題。你可以看到const char [15]與const char [15]匹配的特殊性,但是對於「const char [5]」,它會轉到Generic。
有沒有辦法做到這一點?當在Windows 7上運行
template <typename T>
struct Test {
static const char* type() { return "Generic"; }
};
template <>
struct Test<const char*> {
static const char* type() { return "const char*"; }
};
template <>
struct Test<const char[]> {
static const char* type() { return "const char[]"; }
};
template <>
struct Test<const char[15]> {
static const char* type() { return "const char[15]"; }
};
template <>
struct Test<char*> {
static const char* type() { return "char*"; }
};
template <>
struct Test<char[]> {
static const char* type() { return "char[]"; }
};
template <typename T>
void PrintType(const T& expected) {
std::cerr << expected << " type " << Test<T>::type() << std::endl;
}
int main(int argc, char* argv[]) {
const char* tmp = "const char*";
PrintType(tmp);
PrintType("const char[]");
PrintType("const char[15]");
PrintType("const char[5]");
}
輸出 - VS 2008
const char* type const char*
const char[] type Generic
const char[15] type const char[15]
const char[5] type Generic
謝謝,這個作品很棒。 – Michael
從type()返回的char *僅用於調試目的。我也可以輸出1,2,3,4 ...。這是我的問題的一個例子。謝謝。 – Michael