所以,我希望能够拥有一个静态的 const 编译时结构,它通过使用模板来保存基于字符串的一些值。我只需要最多四个字符。我知道'abcd'的类型是int
,'ab','abc'也是,虽然'a'是类型char
,但它适用于atemplate<int v> struct
我想要做的是取一些 const char “abcd”的大小为 2、3、4、5,并具有与使用“abcd”相同的功能。请注意,我不是指 1、2、3 或 4,因为我期望空终止符。
cout << typeid("abcd").name() << endl;
告诉我这个硬编码字符串的类型是char const [5]
,最后包含空终止符。
我知道我需要将值作为字符旋转,因此它们表示为整数。
我不能使用constexpr
,因为 VS10 不支持它(VS11 也不支持..)
所以,例如在某个地方定义了这个模板,然后是最后一行
template <int v> struct something {
static const int value = v;
};
//Eventually in some method
cout << typeid(something<'abcd'>::value).name() << endl;
工作得很好。
我试过了
template<char v[5]> struct something2 {
static const int value = v[0];
}
template<char const v[5]> struct something2 {
static const int value = v[0];
}
template<const char v[5]> struct something2 {
static const int value = v[0];
}
它们都是单独构建的,但是当我进行测试时,
cout << typeid(something2<"abcd">::value).name() << endl;
我明白了
'something2' : invalid expression as a template argument for 'v'
'something2' : use of class template requires template argument list
这是不可行的还是我误解了什么?