有人可以让我深入了解为什么此代码不起作用:
template <template <class... Ts> class Derived>
struct Base
{
Base(Derived<Ts...>* d_param) : d(d_param) {}
Derived<Ts...>* d;
};
我正在使用GCC 4.8.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;