【发布时间】:2013-01-24 07:01:04
【问题描述】:
我以前用过这些宏:
#define TEXT_A _T("a")
#define TEXT_B _T("b")
std::wstring text = TEXT_A TEXT_B; // then text = "ab"
现在我该怎么做:
#define TEXT_A "a"
#define TEXT_B "b"
std::wstring text = _T(TEXT_A TEXT_B); // i need text be "ab" but failed. and that error is wchar_t cannot connect with char.
我正在寻找一个宏来做到这一点。
【问题讨论】:
-
我需要 marco,因为我有很多 const 字符串。而且我不想打错字。
-
我尝试了 boost::preproceesor,但它需要我的字符串 marco 和 ()。它将被视为一个序列。然后使用 BOOST_PP_SEQ_FOR_EACH 连接。但它很复杂。
-
请注意,有点讽刺的是,
_T(TEXT_A TEXT_B);可以在 GCC 中工作,因为它会扩展为L"a" "b"(假设_T()是针对宽字符),并且当只有一种文字时,GCC 会正确实现字符串文字连接有一个L前缀。但是,MSVC 没有,所以它会被error C2308覆盖。
标签: c++ visual-c++ text literals