Более чистый способ преобразования из CStringW в std :: string? - PullRequest
1 голос
/ 22 июля 2010

Я нашел несколько запутанный способ преобразования CStringW в std::string, но мне было интересно, есть ли более чистый способ, чем:

CStringW cwstr;
std::wstring stdwstr = cwstr;
std::string stdstr = CW2T(stdwstr.c_str());

Ответы [ 3 ]

6 голосов
/ 22 июля 2010

Вы можете вырезать промежуточное значение std::wstring:

CStringW cwstr;
std::string stdstr = CW2A(cwstr);

Также обратите внимание, что вам нужен макрос CW2A для корректности.CW2T преобразуется в строку TCHAR, поэтому отправленный вами код будет компилироваться только для сборки ANSI (где TCHAR равно char).

2 голосов
/ 22 июля 2010
std::string str = CStringA( cwstr );

Работа выполнена.

1 голос
/ 22 июля 2010

std::string имеет следующий конструктор:

template<class InputIterator> string (InputIterator begin, InputIterator end);

Так что вы можете использовать его:

CStringW cwstr;
std::string x( &cwstr.GetString()[0], &cwstr.GetString()[cwstr.GetLength()] );

Произойдет неявное преобразование wchar_t в char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...