【发布时间】:2019-11-22 09:52:37
【问题描述】:
由于我正在使用的域的限制,我需要将字符串文字定义为 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++ 标准来实现相同的结果?提前感谢您的帮助。
【问题讨论】:
标签: c++ macros constexpr string-literals compile-time