0

解決方法がわからない問題に遭遇しました。これが私のコードです。

#include "rapidjson/write.h"
#include "rapidjson/stringbuffer.h"

...

void WriteResultToJSON()
{
  CHAR a[] = "a";
  TCHAR b[] = _T("b");
  WCHAR c[] = L"c";

  StringBuffer s;
  Writer<StringBuffer> writer(s);
  writer.StartObject();
  writer.String("A:");
  writer.String(a);
  writer.String("B");
  writer.String(b);
  writer.String("C");
  writer.String(c);
  write.EndObject();
  printf(s.GetString());
}

プロジェクトの文字セットの値が「Unicode 文字セットを使用する」の場合、コンパイルできません。「マルチバイト文字セットを使用する」に設定されている場合のみ。

エラーは言う:

no instance of overloaded function "rapidjson::Writter<OutputStream, SourceEncoding, Target Encoding, StackAllocator>::String [with OutputStream=rapidjson::StringBuffer, SourceEncoding=rapidjson::UTF8<char>,TargetEncoding=rapidjson::UTF8<char>, StackAllocator=rapidjson::CtrAllocator]" matches the argument list
 argument types are (TCHAR  [2])
 object type is: rapidjson::Writter<rapidjson::StringBuffer, rapidjson::UTF8<char>, rapidjson::UTF8<char>, rapidjson::CrtAllocator>

Rapidjson が utf8 のみをサポートし、すべてが utf16 である現在のプロジェクトでは動作しないという悪い予感がしました。または、文字セットが Unicode に設定されている場合に使用する方法はありますか?

ありがとうございました

yary

4

1 に答える 1

3

クラスのさまざまな文字列メソッドを見るとWriter、それらはすべて入力として期待const SourceEncoding::Ch*されています。デフォルトでは、SourceEncodingisrapidjson::UTF8およびChischarです。入力を受け入れるには、 (または) を としてwchar_t*指定する必要があります。例:rapidjson::UTF16rapidjson::UTF16LESourceEncoding

void WriteResultToJSON()
{
    CHAR a[] = "a";
    TCHAR b[] = TEXT("b");
    WCHAR c[] = L"c";

    StringBuffer s;
    Writer< StringBuffer > writerUTF8(s); // UTF-8 input
    Writer< StringBuffer, UTF16<> > writerUTF16(s); // UTF-16 input

    writerUTF8.StartObject();
    writerUTF8.String("A:");
    writerUTF8.String(a);
    writerUTF8.String("B");

    #ifdef UNICODE
    writerUTF16.String(b);
    #else
    writerUTF8.String(b);
    #endif

    writerUTF8.String("C");
    writerUTF16.String(c);

    writerUTF8.EndObject();
    printf(s.GetString());
}
于 2014-10-26T00:58:58.310 に答える