2011-08-30 483 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:感謝您解決困惑:) –