我有一个 tuple
的 pair
s 其中每一对都有一个固定类型和一个变体类型。我想要的是一个变体类型列表或用这些类型定义一个对象(它肯定是用可变参数模板包构造的)。
根据 How do I strip a tuple<>
back into a variadic template list of types? ,可以用 tuple
的构成类型实例化某些东西.但在这种情况下,我不知道这是否可能,如果可能,我不知道该怎么做。
想象一下我有这样的事情:
struct MyFixedType
{ /* ... */ };
using Tuple = std::tuple<
std::pair<MyFixedType, int>,
std::pair<MyFixedType, double>,
std::pair<MyFixedType, std::string>
>;
我有这门课:
template <typename... Ts>
class MyClass
{
};
我想要的是声明一个
MyClass
的对象与 <int, double, std::string>
注意:虽然这种情况可以使用预处理器或一些宏来处理,但我不允许使用宏。
最佳答案
为简洁起见,使用函数模板参数推导:
template <class Fixed, class... Variant>
MyClass<Variant...> MyClassFromPairTuple_impl(std::tuple<std::pair<Fixed, Variant>...> &&);
template <class Tuple>
using MyClassFromPairTuple = decltype(MyClassFromPairTuple_impl(std::declval<Tuple>()));
用法:
using Tuple = std::tuple<std::pair<MyFixedType, int>, std::pair<MyFixedType, double>, std::pair<MyFixedType, std::string>>;
MyClassFromPairTuple<Tuple> instance; // MyClass<int, double, std::string>
Live demo
关于c++ - 有没有办法将一对元组剥离为可变参数模板类型或使用可变参数类型实例化某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57782366/