由于我所使用的领域的限制,我需要将字符串字面量定义为char const*和wchar const*两种类型,例如:
constexpr auto C_VAR_NAME_1 = "MY_VAR_NAME_1";
constexpr auto C_VAR_NAME_2 = "MY_VAR_NAME_2";
...
constexpr auto W_VAR_NAME_1 = L"MY_VAR_NAME_1";
constexpr auto W_VAR_NAME_2 = L"MY_VAR_NAME_2";
...
我有许多常量,希望避免重复定义相同的变量名称(可能会导致一些拼写错误,从而导致名称不匹配),因此我使用了以下类似宏的方法:
#define WTEXT_IMPL(name) L##name
#define WTEXT(name) WTEXT_IMPL(name)
#define MACRO_VAR_NAME_1 "MY_VAR_NAME_1"
#define MACRO_VAR_NAME_2 "MY_VAR_NAME_2"
...
constexpr auto C_VAR_NAME_1 = MACRO_VAR_NAME_1;
constexpr auto C_VAR_NAME_2 = MACRO_VAR_NAME_2;
...
constexpr auto W_VAR_NAME_1 = WTEXT(MACRO_VAR_NAME_1)
constexpr auto W_VAR_NAME_2 = WTEXT(MACRO_VAR_NAME_2)
...
这个代码可以运行,但如果可能的话,我想摆脱宏;我的问题是:是否有可能在不使用宏的情况下,在编译时使用纯C++标准实现相同的结果?非常感谢您的帮助。