2016-10-04 5 views
1

hana::for_eachでタプルを反復処理すると、実際のオブジェクトにアクセスする方法が見つかりませんでした。 aboost :: hana :: tupleを反復する

struct A { 
    std::string name; 
} 

struct B { 
    std::string name; 
} 

using type_t = decltype(boost::hana::tuple_t<A, B>); 
type_t names; 

boost::hana::for_each(names, [&](const auto& a) { 
     std::cout << a.name << std::endl; 
    }); 

タイプhana::tuple_impl<...>ように表示され、その基になる型decltype(std::decay_t<a>)::typeに、キャスト可能ではないと思われます。

基本的には、同じインターフェイスを持ちながら異なる値を持つテンプレートオブジェクト(コンテナ)のリストを繰り返し処理したいと考えています。これを達成するためのより良い方法は歓迎です。

+0

私はこの 'decltype(ブースト::花:: tuple_t を)'疑います。これは何を意味するのでしょうか? 'tuple_t ' a *型*自身はありませんか? – Nawaz

+0

@Nawazドキュメンテーションは、その使用法は 'auto types = hana :: tuple_t ;'だから、C++ 14の変数テンプレートだと思います。 http://www.boost.org/doc/libs/1_61_0/libs/hana/doc/html/index.html – Etherealone

答えて

8

tuple_tは、タプルhana::typesです。あなただけのtupleで通常のオブジェクトのtupleをしたい:

boost::hana::tuple<A, B> names; 
boost::hana::for_each(names, [&](const auto& x) { 
    std::cout << x.name << std::endl; 
}); 
+1

これは機能します。ハナの種類を少し使いたいのか、正確に何を使っているのかを詳しく説明できますか?ドキュメンテーションは少し誤解を招く。 'hana_types'と' tupe_t'はオブジェクトを包む(整数ではない、 'tuple_c'は積分のための)オブジェクトです。これは簡単な方法です。 – Etherealone

+1

@Etherealone 'tuple_t 'はおおよそ 'tuple ...>'のラッパーです。 'type_c'を使いたいときに使います。 – Barry

+1

ありがとうございます。私はそれを知っているかどうかわかりませんが、 'tuple_t'を使ってMPL-ishの方法で型を操作するように見えます(hanaは' hana_type'型のオブジェクトを操作し、これらを介して実際のC++型で作業することができますオブジェクト(値))​​。通常のタプルは、通常のオブジェクト使用のためのものです。 – Etherealone

関連する問題