在每种类型的可变参数模板上使用模板化的 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>>.