以下の例に示すように、Microsoft ATL CString 型でrapidjsonライブラリを使用しようとしています。
#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 がその関数の UTF16 バージョンのエンコーディングとして wchar_t を内部的に使用していることを知っていますが、rapidjson が文字列を_T マクロで定義された文字列を使用します。
ここで文字列型間の変換に関する msdn リソースを見てきましたが、これは wchar_t の配列の最初のメンバーへのポインターを返す方法しか提供しないため、rapidjson では使用できません。