在C ++中声明常量时,使用string的值作为宽字符串

时间:2013-05-02 09:35:11

标签: c++ string unicode const

使用定义我能够声明一个使用常规字符串值的宽字符串,如下所示:

#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)
         {
         }

由于

3 个答案:

答案 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)
    {}
  // ...
};

我认为您需要同一字符串的charwchar_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))
         {
         }
};