Boost PropertyTreeは、特殊化をtranslator_between
に指定してカスタムタイプのシリアル化を可能にしていますが、ドキュメントを見つけることができず、コードはかなりわかりにくい場合があります。カスタムタイプを処理するためにproperty_treeを拡張する方法を教えてください。
0
A
答えて
1
カスタム型CustomType
のための一般的なパターンは次のとおりです。
namespace boost {
namespace property_tree {
template<>
struct translator_between<KeyType, CustomType>
{
struct type {
typedef KeyType internal_type;
typedef CustomType external_type;
boost::optional<external_type> get_value(const internal_type& str);
boost::optional<internal_type> put_value(const external_type& obj);
};
};
} // namespace property_tree
} // namespace boost
KeyType
はptree
とiptree
ためstd::string
でなければならない、と一般的にあなたのbasic_ptree
の最初のテンプレート引数と同じでなければなりません。あなたはそのような場合にtype
をテンプレートにすることができます。
internal_type
とexternal_type
の2つのtypedefは必須であり、ptree_utils.hpp
のdetail::is_translator<Translator>
で使用されます。
translator_between::type
をtypedefにすることはできますが、技術的には必要ないことに注意してください。私は彼らがすべての例でそれをやっていると思っています。
引数はget_value
とput_value
である必要はありませんが、必ずしもconst &
である必要はありませんが、その理由を考えることはできません。
一般に、translator_between
の宣言をどこに置くか注意してください。特に、ストリーミング演算子がCustomTypeにオーバーロードされている場合は注意してください。この場合、おそらく演算子の宣言の隣にtranslator_between
を置くべきです。
関連する問題
- 1. Linq2Sqlはカスタムタイプを理解する方法を教えてください。
- 2. 別のクラスも拡張したときに、Observableクラスを拡張する方法を教えてください。
- 3. htaccessはPHP拡張モジュールをブロックする方法を教えてください。
- 4. pushsubscriptionchangeイベントの処理方法を教えてください。
- 5. 画像の処理方法を教えてください。
- 6. xmlドキュメントをhexpatで処理する方法を教えてください。
- 7. 拡張メソッド(F#)の作成方法を教えてください。
- 8. Pythonでのスレッドの理解: `run()`に処理されたデータを返す方法を教えてください。
- 9. System.Timers.Timerを安全に処分する方法を教えてください。
- 10. MsTest、DataSourceAttribute - ランタイムで生成されたファイルを処理する方法を教えてください。
- 11. InitializeDataSourceイベントを処理する場合、Infragistics UltraWebGridにデータバインディングを強制する方法を教えてください。
- 12. UIWindowをキーウィンドウにする方法を教えてください。
- 13. iphoneでの録音処理の方法を教えてください。
- 14. Unicode文字のエンコードとデコードの処理方法を教えてください。
- 15. PHP CodeSnifferは拡張子のないファイルをチェックする方法を教えてください。
- 16. UIScrollView。拡大からズームアウトする方法を教えてください。
- 17. ブラウザにインストールされているプラグインの数を取得するためのChrome拡張機能の作成方法を教えてください。
- 18. マトリックスの拡張によるSSRS要素の隙間を防ぐ方法を教えてください。
- 19. タブローを定義する方法を教えてください
- 20. ストリームフィルタをエコーする方法を教えてください。
- 21. オブジェクトをガベージコレクションする方法を教えてください。
- 22. ForeignKeyをモデル化する方法を教えてください。
- 23. Android - アイコンをタッチする方法を教えてください。
- 24. Eclipseプラグインをアンパックする方法を教えてください。
- 25. ImageViewCellをクリックする方法を教えてください。
- 26. Androidアプリをフリーズする方法を教えてください。
- 27. Edge.Funcを固定する方法を教えてください。
- 28. ImageView Androidをトリミングする方法を教えてください。
- 29. ジェンキンズを「ピップインストール」する方法を教えてください。
- 30. メソッドをオーバーライドする方法を教えてください。
これに関連して[類似の質問](http://stackoverflow.com/questions/9745716/change-how-boostproperty-tree-reads-translates-strings-to-bool)がありますが、答えは1つしか提供しません例、一般的な説明ではありません。 –