1

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

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

谢谢

4

3 回答 3

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

我认为您需要同一字符串的 thecharwchar_t版本的原因是因为您正在调用您无法控制的不同库。当您必须拥有另一个版本时,最好进行从一个到另一个的运行时转换,而不是保持字符串的两个副本同步。

于 2013-05-02T12:52:36.040 回答
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))
         {
         }
};
于 2013-05-04T18:17:14.480 回答
0

你不是。MY_STRING在这种情况下不是宏,因此您不能使用预处理器连接。

如果你认为你需要存储两个字符串,我建议你重新审视你的设计。

于 2013-05-02T09:43:24.047 回答