我有一个 Boos.Hana 序列,我想将它打印到屏幕上,用逗号分隔。但是逗号仅分隔元素,所以我必须检查我是否在最后一个元素。
目前我的 hack 非常糟糕(查看指针并转换为void*
.
template<class P, class... Ts>
decltype(auto) operator<<(
std::ostream& os,
boost::hana::tuple<Ts...> const& tpl
){
os << "{";
boost::hana::for_each(
tpl, [&](auto& x){
os << x;
if((void*)&boost::hana::back(tpl) != (void*)&x) os << ", ";
}
);
return os << "}";
}
在 Boost.Fusion 的情况下,它更复杂,因为我使用了融合迭代器(boost::fusion::begin
和boost::fusion::end
),但至少我可以比较迭代器。( bool last = result_of::equal_to<typename result_of::next<First>::type, Last>::value
)。
问这个问题的另一种方法是 Hana 中是否有(元)迭代器。