我想在没有类的情况下定义模板变量,但是MSVC ++不接受它,并且根据C ++标准,谷歌搜索似乎是不正确的:
template<CharType> static CharType hexDigits[17];
template<> char hexDigits[17] = "0123456789ABCDEF";
template<> wchar_t hexDigits[17] = L"0123456789ABCDEF";
然后将在(非专业)模板函数中使用这些专用变量。
所以我不得不这样写:
template<typename CharType> class dummyclass {
static CharType hexDigits[17];
};
template<> char dummyclass<char>::hexDigits[17] = "0123456789ABCDEF";
template<> wchar_t dummyclass<wchar_t>::hexDigits[17] = L"0123456789ABCDEF";
有没有办法可以定义这两个变量而不用定义一个虚拟类?
另外,有没有什么好理由为什么 C ++标准不允许第一段代码?毕竟,允许在课堂外使用模板函数。
答案 0 :(得分:2)
另外,C ++标准不允许第一段代码有什么好的理由吗?毕竟,允许类外的模板函数。
请注意:
template<CharType> static CharType hexDigits[17];
template<> char hexDigits[17] = "0123456789ABCDEF";
template<> wchar_t hexDigits[17] = L"0123456789ABCDEF";
有两个不同类型但名称相同的符号:这不可能有效,因此编译器必须开始修改/修改变量名称,就像它已经为函数和类做的那样。
就干净利落地实现这一点而言,这看起来像我的特质......如果您不介意获取链接错误而不是编译错误,您甚至可以跳过专门化并仅声明相应的静态成员:
template <typename CharType> struct my_char_traits {
static CharType hex_digits[17];
};
template<> char my_char_traits<char>::hex_digits[17] = "0123456789ABCDEF";
template<> wchar_t my_char_traits<wchar_t>::hex_digits[17] = L"0123456789ABCDEF";
答案 1 :(得分:0)
您只能创建类模板或结构或函数模板。
模板变量就像你试图做的那样在C ++中是非法的。
您必须创建一个类模板,然后使用它。