私はブーストフュージョンのいくつかを使用して、通常のC構造体をファイルに書き込もうとしています。XML ファイルは、データをキャプチャして、他のツールと互換性を持たせたり、手動で編集できるようにしたりするのに適した方法のようです。私はほとんどそれを持っているように見えますが、何か基本的なものが欠けているようです. 私はboost::fusionクイックスタートページにあるものとかなり似たものを使用しています: http://www.boost.org/doc/libs/1_54_0/libs/fusion/doc/html/fusion/quick_start.html . 補足として、私はこことブーストのドキュメントを徹底的に調べましたが、誰もフィールド名にアクセスしていないようです。
struct print_xml
{
template <typename T>
void operator()(T const& x) const
{
std::cout
<< '<' << x.first << '>'
<< x
<< "</" << x.first << '>'
;
}
};
次のように使用したいと思います。
BOOST_FUSION_ADAPT_STRUCT(
myStructType,
(double, val1)
(double, val2)
(char, letter)
(int, number)
)
myStructType saveMe = { 3.4, 5.6, 'g', 9};
for_each(saveMe, print_xml());
また、構造体を次のように定義したこともありますが、それでもうまくいきません。
namespace fields{
struct val1;
struct val2;
struct letter;
struct number;
}
typedef fusion::map<
fusion::pair<fields::val1, double>,
fusion::pair<fields::val2, double>,
fusion::pair<fields::letter, char>,
fusion::pair<fields::number, int> > myStructType;
最初にメンバーがないことはわかっていますが、フィールド名にアクセスするにはメンバーが必要なようです! 私が持っているコードは x.second で正常に動作しますが、フィールド名を取得するために必要なことを達成しません。他にどのようにこれを達成できますか? ありがとう!