C++ 可变模板的模板语法问题

C++ 可变模板的模板语法问题,c++,templates,c++11,variadic-templates,C++,Templates,C++11,Variadic Templates,我对可变模板有问题: template <typename T> class A { }; template< template <typename> class T> class B { }; template <template <typename> class T, typename parm> class C { typedef T<parm>

我对可变模板有问题:

            template <typename T> class A { };
            template< template <typename> class T> class B { };
            template <template <typename> class T, typename parm> class C { typedef T<parm> type; };
            template <typename... types> class D { };
            template <template <typename...> class T, typename ... parms> class E { typedef T<parms...> type; };

            // How to pass list in list??
            template < template <typename...> class ...T, ???>
            class F
            {
            };
模板类A{};
模板<模板类T>类B{};
模板类C{typedef T type;};
模板类D{};
模板类E{typedef T type;};
//如何通过列表中的列表??
模板<模板类…T,?>
F类
{
};
首先,将类型传递给模板,没有问题:

            A<int> a; //ok
A//好啊
现在,我想从B创建一个实例,但无法传递模板参数:

            B<A> b; // ok, but no chance to submit <int> inside A!
B;//好的,但是没有机会在A内提交!
因此,我必须扩展参数列表:

            C<A, int> c; // ok, this transport int as parm into A
C;//好的,把int作为parm转换成A
现在我以标准方式使用可变模板:

            D<> d1; // ok
            D<int, float, double> d2;   //ok
D d1;//好啊
D d2//好啊
将参数传递到可变部分也是向前的:

            E<D> e1;    //ok
            E<D, double, float, int> e2; //ok
e1//好啊
E e2//好啊
但是:如果我想要一个列表列表,我找不到任何语法可以让我通过 将参数列表添加到类型列表中。我的意图是这样的。但是上面的例子也显示
B是一个错误!因此,以下示例无法工作:-(

F,D,D>F;
我的目标是通过模板专门化来展开列表列表。有什么提示吗

我理解问题后的解决方案。谢谢!

现在,我可以展开可变模板模板,如下面的示例所示。简单的问题是,我等待的是模板类,而不是简单的类型。有时,解决方案非常简单:-)

这就是我现在的工作成果:

    template <typename ... > class D;

    template <typename Head, typename... types>
    class D<Head, types...>
    {
       public:
          static void Do() { cout << "AnyType" << endl; D<types...>::Do(); }
    };

    template<>
    class D<>
    {
       public:
          static void Do() { cout << "End of D" << endl; }
    };

    template < typename ...T> class H;

    template < typename Head, typename ...T>
    class H<Head, T...>
    {
       public:
          static void Do()
          {
             cout << "unroll H" << endl;
             cout << "Subtype " << endl;
             Head::Do();
             H<T...>::Do();
          }
    };

    template <>
    class H<>
    {
       public:
          static void Do() { cout << "End of H" << endl; }
    };


    int main()
    {
       H< D<int,int,int>, D<float, double, int> >::Do();
       return 0;
    }
模板类D;
模板
D类
{
公众:
静态void Do(){cout如下所示:

template < template <typename...> class ...T >
class F
{
};
int main()
{
  F< D, D > f;
}
template