在c++中声明常量时,对宽字符串使用value of string

Use value of string for wide string when declaring constants in C++

本文关键字:字符串 value string of c++ 声明 常量      更新时间:2023-10-16

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

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

谢谢

一个可能的解决方案:

#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版本的原因是因为您调用了您无法控制的不同库。与其保持字符串的两个副本同步,不如在运行时将其中一个版本转换为另一个版本。

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

如果您认为需要同时存储两个字符串,我建议您重新考虑您的设计。

试试这样:

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