定义没有类的模板变量
Define template variables without a class
我想定义没有类的模板变量,但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++是非法的。
您必须创建一个类模板,然后使用它。
相关文章:
- 用C++中的一个变量定义一个常量
- 变量定义到C++布尔值转换
- 未声明的标识符错误,但变量定义正确 (?)
- C++多线程程序:变量定义为类成员的隔离错误
- 将变量定义为静态时,为什么可以多次定义它
- 初始值设定项列表与构造函数赋值与变量定义
- 如何根据传递给函数的变量定义特征矩阵大小
- C++ 描述如何使用来简化变量定义
- 如何转发声明依赖于变量定义的类,而变体定义又依赖于模板化类?
- 是否修改其声明语句中的变量定义良好
- 使用类的其他成员变量定义类的成员变量数组
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 元组 std::get() 不适用于变量定义的常量
- 全局使用变量定义和C 声明
- C++变量定义中的易失性类型量词位置
- 将变量定义为数组和正确的语法
- 多个,包括具有变量定义的头文件
- 调用构造函数,并将成员作为参数解析为变量定义
- 逗号分隔变量定义中关系前的序列
- 如何使用命名变量定义常量右值引用参数的默认值