gpt4 book ai didi

c++ - 定义没有类的模板变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:07 25 4
gpt4 key购买 nike

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

最佳答案

Also, is there any good reason why the C++ standard does not allow the first piece of code? After all, template functions outside a class are permitted.

请注意:

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++ - 定义没有类的模板变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12509961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com