簡體   English   中英

在C ++中聲明常量時,將string的值用於寬字符串

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

使用定義,我可以聲明使用常規字符串值的寬字符串,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM