Читая код C ++ библиотеки MediaInfoLib, кажется, есть две возможности. Библиотека определяет псевдоним типа String
, и это тип, который вы видите.
Во-первых, вот определение типов Char
и String
:
namespace MediaInfoLib {
/* ... */
//Char types
#undef __T
#define __T(__x) __T(__x)
#if defined(UNICODE) || defined (_UNICODE)
typedef wchar_t Char; ///< Unicode/Ansi independant char
#undef __T
#define __T(__x) L ## __x
#else
typedef char Char; ///< Unicode/Ansi independant char
#undef __T
#define __T(__x) __x
#endif
typedef std::basic_string<MediaInfoLib::Char> String; ///< Unicode/Ansi independant string
/* ... */
} // end namespace
Если макрос UNICODE
или _UNICODE
был определен при сборке библиотеки, то типом является std::basic_string<wchar_t>
, то есть std::wstring
в стандартной библиотеке .
Чтобы преобразовать это в std::string
, посмотрите этот вопрос: Как преобразовать wstring в строку?
Самый простой ответ там использует std::wstring_convert
.
Если макрос UNICODE
или _UNICODE
НЕ был определен при сборке библиотеки, тогда MediaInfoLib::Char
- это тип char
, а тип MediaInfoLib::String
- std::basic_string<char>
уже std::string
. То есть, в этом случае тип возвращаемого значения уже std :: string .