我正在尝试将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&amp;&amp;)':无法将参数1从'CString'转换为'rapidjson :: Type'fastjson document.h 1020
这意味着需要在CString和rapidjson需要的格式之间进行转换。我知道rapidjson内部使用wchar_t作为其函数的UTF16版本的编码,但是我不知道如何将一个CString转换为wchar_t(或wchar_t数组),以使rapidjson能够使用该字符串作为它使用_T宏定义的字符串。
我已经查看了在字符串类型here之间转换的msdn资源,但是这只提供了一种方法来返回指向wchar_t数组的第一个成员的指针,而rapidjson则无法使用它。
答案 0 :(得分:1)
执行此操作的正确方法是使用其中一个构造函数rapidjson为其GenericValue类提供,即指向字符编码类型和字符长度的指针的构造函数。
GenericValue(const Ch* s, SizeType length) RAPIDJSON_NOEXCEPT : data_(), flags_() { SetStringRaw(StringRef(s, length)); }
此构造函数可以获取指向rapidjson接受的任何字符类型的指针以及长度,然后将其读取为值。对于ATL :: CString类,可以使用CString对象上可用的.GetString()
和.GetLength()
方法来完成。返回可在DOM树中使用的Value的函数如下所示:
typedef GenericValue<UTF16<> > WValue;
WValue CStringToRapidjsonValue(CString in)
{
WValue out(in.GetString(), in.GetLength());
return out;
}