当然,这是可能的。关键是必须使用某种包扩展。你的结构需要
int
非类型模板参数。所以我们必须扩展整数序列的包来将它们输入到
MyStruct
一次一个。
MyStruct<MyIntegerSequence>...
例如,使用类模板(和部分专用化):
template<typename Seq> struct MyVariantHelper;
template<int... Is> struct MyVariantHelper<std::integer_sequence<int, Is...>> {
using type = std::variant<MyStruct<Is>...>;
};
using MyVariant = MyVariantHelper<MyIntegerSequence>::type;
或者使用函数模板和
decltype
:
template<int... Is>
auto MyVariantHelper(std::integer_sequence<int, Is...>)
-> std::variant<MyStruct<Is>...>;
using MyVariant = decltype(MyVariantHelper(MyIntegerSequence{}));