同時に、いくつかのグローバル C++ 定数を定義および宣言しようとしています。
constants.hで:
#ifdef DEFINE_CONSTANTS
#define DECLARE_CONSTANT(DECL_, VAL_) extern DECL_ = VAL_
#else
#define DECLARE_CONSTANT(DECL_, VAL_) extern DECL_
#endif
namespace Constants {
DECLARE_CONSTANT(const char LABEL[], "SomeText");
DECLARE_CONSTANT(const int REQUEST_TIMEOUT_MS, 5000);
};
constants.cppで:
#define DEFINE_CONSTANTS
#include "constants.h"
#undef DEFINE_CONSTANTS
定数を使用する他のすべてのファイルには、constants.h を含めるだけです。
さて、配列初期化子を使用しない場合、上記は問題なく機能します。ただし、次のようなことをしようとすると:
DECLARE_CONSTANT(const int ARRAY[], {0,1,2});
constants.cppをコンパイルすると、初期化子のコンマがプリプロセッサを「混乱」させて、DECLARE_CONSTANT のパラメータが多すぎると判断するため、エラーが発生します (正確なエラーはコンパイラによって異なります)。
これに対処するためのトリックはありますか?他のソリューションも大歓迎です。