Я пытаюсь использовать библиотеку rapidjson с типом Microsoft ATL CString, как показано в примере ниже.
#include "stdafx.h"
#include "rapidjson\document.h"
using namespace rapidjson;
typedef GenericDocument<UTF16<> > WDocument;
int main()
{
WDocument document;
CString hello = _T("Hello");
document.SetObject();
document.AddMember(_T("Hello"), hello, document.GetAllocator());
return 0;
}
Это не удается из-за ошибки компилятора
'rapidjson :: GenericValue :: GenericValue (rapidjson :: GenericValue &&)': невозможно преобразовать аргумент 1 из 'CString' в 'rapidjson :: Type' rapidjson document.h 1020
что означает, что требуется преобразование между CString и форматом, который потребуется Rapidjson. Я знаю, что rapidjson внутренне использует wchar_t в качестве кодировки для версии своих функций UTF16, однако я не уверен, как преобразовать CString в wchar_t (или массив wchar_t) таким образом, чтобы quickjson мог использовать строку как он использует строки, определенные макросом _T.
Я просмотрел ресурсы msdn по преобразованию между строковыми типами здесь, но это только дает возможность вернуть указатель на первый член массива wchar_t, который Rapidjson не может использовать.
CStringW
иL"Hello"
(в сборке ANSICString
хранитchar
s, а неwchar_t
s). Может потребоваться явное приведение кconst wchar_t*
(CStringW
предоставляет подходящий оператор преобразования). - person Igor Tandetnik   schedule 07.12.2014