В дополнение к проблемам, которые решал Луи, есть и другие проблемы с тем, как вы пытаетесь использовать кортеж.Обратите внимание, что кортеж не может иметь свою длину или типы внутри него изменены, так как типы полностью неизменны в C ++, поэтому вы должны думать с точки зрения чисто функционального программирования.
Ваш вызов is_empty
всегда будет возвращать trueи drop_front
не может изменить входное значение, оно возвращает только новый кортеж с удаленным передним элементом.(в вашем случае это будет tuple<>
, что пусто).
Возможно, вы захотите переосмыслить свой сценарий использования для преобразования кортежа в вектор, но вот пример, который, надеюсь, поможет вам начать.
#include <boost/hana.hpp>
#include <iostream>
#include <string>
#include <vector>
namespace hana = boost::hana;
template <typename T>
constexpr auto to_vector = [](auto&& ...x) {
return std::vector<T>{std::forward<decltype(x)>(x)...};
};
int main() {
auto xs = hana::make_tuple("Hello", "World");
auto vec = hana::unpack(xs, to_vector<std::string>);
for (auto const& x : vec) {
std::cout << x << ' ';
}
std::cout << '\n';
}
Примечания о типах списка:
std::vector
имеет длительность выполнения и один тип для всех элементов. std::array
имеетдлина времени компиляции и один тип для всех элементов. hana::tuple
имеет длину времени компиляции, и любой элемент может быть любого типа
.