【问题标题】:Class with pointers to variadic template template parameters带有指向可变参数模板模板参数的指针的类
【发布时间】:2014-02-03 10:43:25
【问题描述】:
谁能告诉我为什么这段代码不起作用:
template <template <class... Ts> class Derived>
struct Base
{
Base(Derived<Ts...>* d_param) : d(d_param) {}
Derived<Ts...>* d;
};
我使用的是 GCC 4.8.1。
【问题讨论】:
标签:
c++
inheritance
c++11
variadic-templates
【解决方案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;