gpt4 book ai didi

c++ - 使用 rapidjson 和 ATL CString

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:01 26 4
gpt4 key购买 nike

我正在尝试使用 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 &&)': cannot convert argument 1 from 'CString' to 'rapidjson::Type' rapidjson document.h 1020

这确实意味着需要在 CString 和 rapidjson 需要的格式之间进行转换。我知道 rapidjson 在内部使用 wchar_t 作为其函数的 UTF16 版本的编码,但是我不确定如何以 rapidjson 能够将字符串用作它使用由 _T 宏定义的字符串。

我查看了有关字符串类型之间转换的 msdn 资源 here但这只提供了一种返回指向 wchar_t 数组第一个成员的指针的方法,rapidjson 无法使用。

最佳答案

正确的方法是使用 rapidjson 为其 GenericValue 类提供的构造函数之一,即指向字符编码类型和字符长度的指针的构造函数。

GenericValue(const Ch* s, SizeType length) RAPIDJSON_NOEXCEPT : data_(), flags_() { SetStringRaw(StringRef(s, length)); }

此构造函数可以获取指向 rapidjson 接受的任何字符类型的指针以及长度,然后将其读入一个值。对于 ATL::CString 类,这可以通过 CString 对象上可用的 .GetString().GetLength() 方法来完成。返回可在 DOM 树中使用的值的函数如下所示:

typedef GenericValue<UTF16<> > WValue;

WValue CStringToRapidjsonValue(CString in)
{
WValue out(in.GetString(), in.GetLength());
return out;
}

关于c++ - 使用 rapidjson 和 ATL CString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com