要在 ahana::tuple
和 a之间进行转换std::tuple
,您需要创建std::tuple
一个有效的 Hana 序列。由于std::tuple
支持开箱即用,您只需要包含<boost/hana/ext/std/tuple.hpp>
. 因此,以下代码有效:
#include <boost/hana.hpp>
#include <boost/hana/ext/std/tuple.hpp>
#include <iostream>
#include <tuple>
namespace hana = boost::hana;
int main() {
int x{7};
float y{3.14};
double z{2.7183};
auto t = hana::to<hana::tuple_tag>(std::tie(x, y, z));
hana::for_each(t, [](auto& o) { std::cout << o << '\n'; });
}
请注意,您还可以使用hana::to_tuple
更少的冗长:
auto t = hana::to_tuple(std::tie(x, y, z));
话虽这么说,既然您正在使用std::tie
,您可能想要创建一个hana::tuple
包含引用,对吧?这现在是不可能的,原因见这个。但是,只要包含上面的适配器标头,您就可以简单地使用std::tuple
in :hana::for_each
#include <boost/hana.hpp>
#include <boost/hana/ext/std/tuple.hpp>
#include <iostream>
#include <tuple>
namespace hana = boost::hana;
int main() {
int x{7};
float y{3.14};
double z{2.7183};
auto t = std::tie(x, y, z);
hana::for_each(t, [](auto& o) { std::cout << o << '\n'; });
}