问题实例化结构模板

时间:2011-08-30 17:58:45

标签: c++ templates

如何实例化此模板结构?

template<typename T,
  template<typename, template <typename> class D= std::allocator
           >class Z=std::vector
         >

struct amen
{
    Z<T,D<T> > cc; // i know D template class parameter is not visible , how do i do it?
};

int main(){
amen<int> moreAmen;
}

任何人都可以告诉我该怎么做吗?

1 个答案:

答案 0 :(得分:6)

你错了。它应该是

template<typename U, typename D = std::allocator<U>
         > class Z = std::vector

std::vector的分配器不是模板。然后cc的声明变为

Z<T> cc;

当您为分配器提供默认参数时,您不需要为其传递任何参数。如果您愿意,您需要再次传递std::allocator<T>或其他一些分配器

Z<T, std::allocator<T> > cc;
// or T<T, my::funny:allocator> cc;

模板模板参数的参数的默认参数不会“继承”到类/结构模板的相应模板模板参数。您需要再次指定它,如上所述(通过将std::allocator<U>声明为默认模板参数)。