12

私はブーストフュージョンのいくつかを使用して、通常の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 で正常に動作しますが、フィールド名を取得するために必要なことを達成しません。他にどのようにこれを達成できますか? ありがとう!

4

1 に答える 1