鉴于此宏
#define MAKE_TYPE(_a, _b, _c, _d) ((_a) | ((_b) << 8) | ((_c) << 16) | ((_d) << 24))
我想替换它,以便它取而代之的是一个数组 [4]。这样我就可以写 MAKE_TYPE("ABCD") 而不是丑陋的 MAKE_TYPE('A', 'B', 'C', 'D')
我在编译时使用它来生成一些常量。
但是,它不喜欢我传递这样的字符串
#define MAKE_TYPE(s) ((s[3]) | ((s[2]) << 8) | ((s[1]) << 16) | ((s[0]) << 24))
错误:数组引用不能出现在常量表达式中
好吧,那没有用。所以我想我会使用模板元编程来破解它
template< char[4] s > class MAKE_TYPE
{
public:
enum{ RESULT = s[3] | (s[2] << 8) | (s[1] << 16) | (s[0] << 24) };
};
不幸的是,这也没有奏效。我似乎无法在模板中添加 char[4]。我得到这些错误:
错误:“s”之前的预期“>”错误:“s”未在此范围内声明错误:数组引用不能出现在常量表达式中
我该怎么做?