如何实例化此模板结构?
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;
}
任何人都可以告诉我该怎么做吗?
答案 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>
声明为默认模板参数)。