使用定义我能够声明一个使用常规字符串值的宽字符串,如下所示:
#define MY_STRING "my value"
#define MY_WIDE_STRING L"" MY_STRING
如何实现相同但使用成员变量和初始化列表 - 即类似的东西......
class MyClass
{
private:
const std::string MY_STRING
const std::wstring MY_WIDE_STRING
public:
MyClass():MY_STRING("my value"), MY_WIDE_STRING(L"" MY_STRING)
{
}
由于
答案 0 :(得分:1)
可能的解决方案:
#define MY_VALUE "my value"
class MyClass
{
private:
const std::string MY_STRING
const std::wstring MY_WIDE_STRING
public:
MyClass():MY_STRING(MY_VALUE), MY_WIDE_STRING(L"" MY_VALUE)
{}
// ...
};
我认为您需要同一字符串的char
和wchar_t
版本的原因是因为您正在调用您无法控制的不同库。而不是保持字符串的两个副本同步,当你必须拥有另一个版本时,最好从一个到另一个进行运行时转换。
答案 1 :(得分:0)
你不是。在这种情况下,MY_STRING
不是宏,因此您无法使用预处理器连接。
如果您认为需要存储两个字符串,我建议您重新访问您的设计。
答案 2 :(得分:0)
尝试这样的事情:
#define MY_VALUE "my value"
#define MAKE_WIDE_STRING_NX(S) L ## S
#define MAKE_WIDE_STRING(S) MAKE_WIDE_STRING_NX(S)
class MyClass
{
private:
const std::string _str;
const std::wstring _wstr;
public:
MyClass(): _str(MY_VALUE), _wstr(MAKE_WIDE_STRING(MY_VALUE))
{
}
};