2017-01-05 9 views
1

Я ищу какой-то мета-вектор/связанный список. Кажется, mpl :: vector был лучшим способом сделать это. Но теперь есть хана. К сожалению, я не могу найти какой-то hana :: vector. Я видел адаптер для mpl :: vector, и все. Итак, это означает, что mpl :: vector - лучший способ сделать что-то?Boost mpl :: vector and hana

Хана довольно быстро компилировалась, поэтому я подумал: ну почему бы и нет? Но mpl не так быстро, мне действительно нужно самому закодировать mpl :: vector?

+1

Почему ['hana :: tuple'] (http://www.boost.org/doc/libs/1_62_0/libs/hana/doc/html/structboost_1_1hana_1_1tuple.html) не работает для вас? –

+0

'mpl :: *' материал довольно старый, это pre-C++ 11. Например, многие вещи, чем сегодня, выполняются с помощью простого расширения пакета параметров, все еще выполняются с помощью рекурсивных шаблонов в 'mpl'. Это будет значительно медленнее, чем современный код. И да, кодирование 'vector' в C++ 14 является куском пирога и может быть легко выполнено, если' mpl :: vector' не является satsficatory. – SergeyA

ответ

3

boost::hana::tuple должен быть достаточно хорошей заменой для mpl::vector, если вам нужен гетерогенный «список» типов/значений.

Вы можете получить доступ к товару в определенном индексе с помощью boost::hana::at, добавить элементы с boost::hana::append, удалить их с помощью boost::hana::remove и многое другое.

Даже если между интерфейсом нет соответствия 1-к-1, должно быть тривиально реализовать некоторые функции полезности, учитывая упомянутые выше примитивы.


Если вам нужен список типов, вы должны использовать boost::hana::tuple_t, что синтаксический сахар для hana::tuple(hana::type_c<Types>...).

+0

'mpl :: vector' - это список типов, а не значений. Он отличается от 'hana :: tuple'. – SergeyA

+1

В типах 'boost :: hana' значения - это основной принцип библиотеки. Например. 'hana :: make_tuple (hana :: type_c , hana :: type_c )' –

+0

Кажется, что другого выбора нет. Теперь я просто проверю, недостаточно ли std :: tuple с C++ 17. Спасибо –

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

  • Нет связанных вопросов^_^