带有可变参数模板模板参数指针的类

时间:2014-01-15 04:53:38

标签: c++ inheritance c++11 variadic-templates

有人可以让我深入了解为什么此代码不起作用:

template <template <class... Ts> class Derived>
struct Base
{
   Base(Derived<Ts...>* d_param) : d(d_param) {}

   Derived<Ts...>* d;
};

我正在使用GCC 4.8.1。

1 个答案:

答案 0 :(得分:3)

问题是模板模板参数可能包含模板参数的标识符,但它们不可用。根据您的预期用途,您需要分别传递完整类型或模板及其参数。第一个选项的示例:

template< class Derived >
struct Base
{
    Base(Derived* d_param) : d(d_param) {}
    Derived* d;
};

用作

Base< std::map< int, double > > x;

或者如果您需要单独的参数,您的第二个选项是:

template< template<class...> class Derived, class... Ts >
struct Base
{
    Base(Derived<Ts...>* d_param) : d(d_param) {}
    Derived<Ts...>* d;
};

用作

Base< std::map, int, double > x;