我正在尝试同时定义和声明一些全局 C++ 常量:
在常量.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 的参数太多(确切的错误取决于编译器)。
有什么技巧可以解决这个问题吗?也欢迎其他解决方案。