Boost Hanaシンプルで美しい方法で、クラスメンバフィールドでイントロスペクションする機能を提供します。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;
});
ただし、ドキュメントが唯一のメンバーフィールドに言及しています。私は方法についてもイントロスペクトしたいと思います。私はメソッドを使って例を素直に拡張しようとしました:
struct Foo {
std::string get_name() const { return "louis"; }
};
BOOST_HANA_ADAPT_STRUCT(::Foo, get_name);
これはコンパイルされます。しかし、私はそれを使用しようとすぐに、上記のようなコードを使用して(for_each
...)、私は多くのコンパイルエラーを取得します。メソッドのイントロスペクションを示す例はないので、サポートされているかどうかは疑問です。
これはサポートされていますが、より良い文書化が可能であることに同意します。 ['Struct'](http://ldionne.com/hana/structboost_1_1hana_1_1Struct.html)コンセプトの_完全な定義_セクションを見ることができます。私は今すぐ完全な答えを書く時間がありませんが、私は次の日にそれをやろうとします(またチュートリアルも更新します)。 –