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

Problem instantiating struct template

本文关键字:问题 实例化 结构      更新时间:2023-10-16

如何实例化这个模板结构?

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;
}
谁能告诉我怎么做?

你错了。应该是

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>声明为默认模板参数)。