2011-08-30 109 views
3

如何实例化此模板结构?实例化结构模板的问题

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; 
} 

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

回答

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

+0

但是std :: allocator是函数模板还是类模板呢?因为我们需要指定模板id,谢谢 –

+0

@ Mr.Anubis:'std :: vector'的模板签名是'',而不是' class>'。 –

+0

@Kerrek:感谢您解决困惑:) –