定义没有类的模板变量

Define template variables without a class

本文关键字:变量 定义      更新时间:2023-10-16

我想定义没有类的模板变量,但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++标准不允许第一段代码有什么充分的理由吗?毕竟,允许在类外部使用模板函数

另外,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";

只能创建类模板或结构或函数模板。

您尝试做的模板变量在C++是非法的。

您必须创建一个类模板,然后使用它。