Boost.Fusion メンバ変数名を取得する

【fusion】 Getting the adapted structure's member names


Fusionシーケンスにアダプトされた型なら、boost::fusion::extension::struct_member_name::call()を使えばメンバ変数名が取得できるようです。

#include <iostream>
#include <string>
#include <boost/fusion/include/adapt_struct.hpp>

struct person {
    int id;
    int age;
    std::string name;

    person(int id, int age, const std::string& name)
        : id(id), age(age), name(name) {}
};

BOOST_FUSION_ADAPT_STRUCT(
    person,
    (int, id)
    (int, age)
    (std::string, name)
)

namespace fusionex = boost::fusion::extension;

int main()
{
    std::cout << fusionex::struct_member_name<person, 0>::call() << std::endl;
    std::cout << fusionex::struct_member_name<person, 1>::call() << std::endl;
    std::cout << fusionex::struct_member_name<person, 2>::call() << std::endl;
}
id
age
name

ただし、内部実装として取得できるようにしているだけで、正式に公開されている機能ではないので注意(アンドキュメント)。
ちなみに返される型はconst char*です。