Boost Hana提供了以简单而美观的方式自省类成员字段的能力:
// define:
struct Person {
std::string name;
int age;
};
// below could be done inline, but I prefer not polluting the
// declaration of the struct
BOOST_HANA_ADAPT_STRUCT(not_my_namespace::Person, name, age);
// then:
Person john{"John", 30};
hana::for_each(john, [](auto pair) {
std::cout << hana::to<char const*>(hana::first(pair)) << ": "
<< hana::second(pair) << std::endl;
});
但是,文档仅提及 member fields。我也想反省一下方法。我试图用一种方法天真地扩展这个例子:
struct Foo {
std::string get_name() const { return "louis"; }
};
BOOST_HANA_ADAPT_STRUCT(::Foo, get_name);
这编译。但是,一旦我尝试使用它,使用类似于上面的代码(for_each
...),我就会得到很多编译错误。由于没有显示方法自省的示例,我想知道它是否受支持。