C++ ときどき ごはん、わりとてぃーぶれいく☆

Wonder Rabbit Projectのなかのひとのブログ。主にC++。

UE4/C++: rapidxml を UE4 で使いたい場合の例外不使用化のメモ

1つ前の記事 「UE4/C++: 実行時に取得したドキュメントが SJIS だった時に ICU で UTF8 にしたり UTF16 で TCHAR にするメモ」UE4のユーザープロジェクトレベルで ICU ライブラリーを取り込んで文字コードを操作する実装のメモを書きました。この記事の執筆初稿ではソースコードICU の例外不使用について書こうとしたところで rapidxml のそれについて書いてしまっていました(現在は ICU のコード例に修正済みです)。 rapidxml は前回のメモには直接関係無いので記事の修正時に消したのですが、それはそれで有用な事もあるかと思い、その部分だけ今回の記事へ移して残す事にしました。

// ...
// ↓ <Project>.Build.cs で `bEnableExceptions = true` しない場合は rapidcml でも例外を使わないCPP定義をする
#define RAPIDXML_NO_EXCEPTIONS
#include <rapidxml.hpp>
// ...
// RAPIDXML_NO_EXCEPTIONS を使う場合にはエラーハンドラー関数の定義が必要
// ref: http://rapidxml.sourceforge.net/manual.html#namespacerapidxml_1error_handling
namespace rapidxml
{
  void parse_error_handler( const char *what, void * )
  {
    UE_LOG( LogTemp, Error, TEXT( "rapidxml-error: what=%s" ), ANSI_TO_TCHAR( what ) )
  }
}
  • rapidxml の使い方そのものについては必要に応じて公式ドキュメントや CodeZine/επιστημη 高速軽量XMLパーサ:RapidXMLを触ってみた を見るといいと思います。
  • 前回の記事と今回の記事は HTTP で SJISXML を拾ってきて ICU と rapidxml で処理したい場合のソースからそれぞれのライブラリーを UE4 で使う上で必要な .Build.cs や例外不使用化について整理したものです。