具有指向可变参数模板模板参数的指针的类

Class with pointers to variadic template template parameters

本文关键字:参数 指针 变参      更新时间:2023-10-16

有人可以给我一些了解为什么这段代码不起作用:

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

我正在使用 GCC 4.8.1。

问题是模板模板参数可能具有模板参数的标识符,但它们不可用。根据设想的用途,需要单独传入完整类型或模板及其参数。第一个选项的示例:

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;