このマクロを考えると
#define MAKE_TYPE(_a, _b, _c, _d) ((_a) | ((_b) << 8) | ((_c) << 16) | ((_d) << 24))
代わりに配列[4]を取るように置き換えたいと思います。醜い MAKE_TYPE('A', 'B', 'C', 'D') の代わりに MAKE_TYPE("ABCD") を書くことができるように
コンパイル時にこれを使用して、いくつかの定数を生成しています。
しかし、このような文字列を渡すのは好きではありません
#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' はこのスコープで宣言されていません エラー: 配列参照は定数式に表示できません
どうすればいいですか?