首页 > 解决方案 > 使用在每种类型的可变参数模板上模板化的类初始化元组

问题描述

标题可能很难解析,所以这就是我的意思。假设我有几个类 A、B1、B2、B3 ...... Bn 我想在某个 B 类上保存一个 A 的元组模板。有效的最终结果可能类似于tuple<A<B3>, A<B1>> _chain. 这将包含在我们称为 C 的容器类中。我正在寻找的是用一堆 B 类型初始化 C,然后将它们包装在我的 A 类中。我不能简单地做

template<class... T>
class C
{
    std::tuple<T...> _chain;
public:
    C(const T&... t) : _chain(t...) { }
};

因为那样我最终会得到一个 Bs 元组。是否有一种符合人体工程学的方法来包装 init 步骤(_chain(t...)),这样我最终会得到一个在我传递给班级的 B 类上模板化的 A 元组?

标签: c++c++11c++14c++17stdtuple

解决方案


你的意思是这样的:

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>>


推荐阅读