boost::variant
通过 公开其变体类型列表boost::variant<>::types
,可以方便地与boost::mpl::for_each
. std::variant
缺少这样的成员。
我看到std::variant_alternative
提供了。这可以用来生成boost::mpl::for_each
可以摄取的类型列表吗?或者它是否支持不同的迭代策略?
boost::variant
通过 公开其变体类型列表boost::variant<>::types
,可以方便地与boost::mpl::for_each
. std::variant
缺少这样的成员。
我看到std::variant_alternative
提供了。这可以用来生成boost::mpl::for_each
可以摄取的类型列表吗?或者它是否支持不同的迭代策略?
我对 Boost.MPL 不是 100% 熟悉,但这应该可以满足您的需求:
template <class Variant>
struct mpl_types_impl;
template <class... Ts>
struct mpl_types_impl<std::variant<Ts...>> {
using type = boost::mpl::vector<Ts...>;
};
template <class Variant>
using mpl_types = typename mpl_types_impl<Variant>::type;