2016-10-04 4 views
1

Я не смог найти способ доступа к реальному объекту с помощью hana::for_each итерации по кортежам.Итерация над boost :: 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; 
    }); 

Тип a, как представляется, hana::tuple_impl<...> и, кажется, не-литьевой его базового типа decltype(std::decay_t<a>)::type.

Я в основном хочу перебирать список шаблонных объектов (контейнеров), которые имеют один и тот же интерфейс, но содержат разные значения. Лучше всего это сделать.

+0

Я сомневаюсь, что это 'decltype (повышение :: HANA :: tuple_t )'. Что это значит? Не 'tuple_t ' a * type * сам? – 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::type s. Вы хотите tuple нормальных объектов, что является просто tuple:

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

Это действительно работает. Можете ли вы уточнить, когда немного использовать типы ханы и для чего они нужны? Документация немного вводит в заблуждение. Он говорит, как будто я должен обтекать объекты (которые не являются интегральными, 'tuple_c' для интегралов) с' hana_types' и 'tupe_t' - это простой способ сделать это. – Etherealone

+1

@Etherealone 'tuple_t ' приблизительно является оберткой для 'tuple ...>'. Вы используете его, когда хотите 'type_c's. – Barry

+1

Спасибо. Я не знаю, получил ли я это, но похоже, что я использовал бы 'tuple_t' для работы с типами в методе MPL-ish (hana работает с объектами типа' hana_type' и позволяет нам работать с реальными типами C++ через эти объекты (значения)). И обычный кортеж предназначен для обычного использования объектов. – Etherealone

Смежные вопросы