C++ 实例化结构模板时出现问题

C++ 实例化结构模板时出现问题,c++,templates,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 vi

如何实例化此模板结构

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;
}
模板
阿门结构
{
Z cc;//我知道D模板类参数不可见,我该怎么做?
};
int main(){
阿门·莫拉门;
}

谁能告诉我怎么做吗?

你搞错了。应该是

template<typename U, typename D = std::allocator<U>
         > class Z = std::vector
由于您为分配器提供了一个默认参数,因此不需要为它传递任何参数。如果需要,您需要再次传递
std::allocator
或其他分配器

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

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

但是std::allocator是函数模板还是类模板?,因为我们需要指定模板id,thanks@Mr.Anubis:std::vector的模板签名是
,而不是
@MrAnubis,这是一个类模板。就像你可以说
template
一样,你可以说上面的内容。
Z<T, std::allocator<T> > cc;
// or T<T, my::funny:allocator> cc;