在每种类型的可变参数模板上使用模板化的 class 初始化元组
Initialize tuple with class templated on each type of variadic template
标题可能很难解析,所以这就是我的意思。假设我有几个 classes A、B1、B2、B3...Bn,我想在其中保存一个 A 的元组模板化在某些 B class 上。有效的最终结果可能类似于 tuple<A<B3>, A<B1>> _chain
。这将包含在我们称为 C 的容器 class 中。我正在寻找的是用一堆 B 类型初始化 C,然后将其包装在我的 A class 中。我不能简单地做
template<class... T>
class C
{
std::tuple<T...> _chain;
public:
C(const T&... t) : _chain(t...) { }
};
因为那时我会得到一个 B 的元组。是否有一种符合人体工程学的方法来包装初始步骤 (_chain(t...)
),以便我最终得到一个在 B classes 上模板化的 A 元组,我传递给 class?
你的意思是这样的吗:
template<template <typename> typename Base, class... T>
class C
{
std::tuple<Base<T>...> _chain;
public:
C(const Base<T>&... t) : _chain(t...) { }
};
你可以这样使用它:C<A, B1, B2, B3> c;
_chain
将是一个元组 tuple<A<B1>, A<B2>, A<B3>>
.
标题可能很难解析,所以这就是我的意思。假设我有几个 classes A、B1、B2、B3...Bn,我想在其中保存一个 A 的元组模板化在某些 B class 上。有效的最终结果可能类似于 tuple<A<B3>, A<B1>> _chain
。这将包含在我们称为 C 的容器 class 中。我正在寻找的是用一堆 B 类型初始化 C,然后将其包装在我的 A class 中。我不能简单地做
template<class... T>
class C
{
std::tuple<T...> _chain;
public:
C(const T&... t) : _chain(t...) { }
};
因为那时我会得到一个 B 的元组。是否有一种符合人体工程学的方法来包装初始步骤 (_chain(t...)
),以便我最终得到一个在 B classes 上模板化的 A 元组,我传递给 class?
你的意思是这样的吗:
template<template <typename> typename Base, class... T>
class C
{
std::tuple<Base<T>...> _chain;
public:
C(const Base<T>&... t) : _chain(t...) { }
};
你可以这样使用它:C<A, B1, B2, B3> c;
_chain
将是一个元组 tuple<A<B1>, A<B2>, A<B3>>
.