2017-08-04 72 views
0

我試圖在Boost Class template queue閱讀,發現類模板的以下內容:BOOST - 類模板隊列

template<typename T, typename A0, typename A1, typename A2> 
class queue { 
    public: 
    // member classes/structs/unions 
    template<typename T, typename... Options> 
    struct implementation_defined { 
    // types 
    typedef node_allocator allocator; 
    typedef std::size_t size_type; 
    }; 
    // construct/copy/destruct 
    queue(void); 
    template<typename U> 
    explicit queue(typename node_allocator::template rebind<U>::other const &); 
    explicit queue(allocator const &); 
    explicit queue(size_type); 
    template<typename U> 
    queue(size_type, 
      typename node_allocator::template rebind<U>::other const &); 
    ~queue(void); 
....... 
}; 

我試圖瞭解模板一步一步 - 如此

template<typename T, typename A0, typename A1, typename A2> 

對我而言,當提供類型T,A0,A1和A2時,將創建模板,如

queue<int, char, myclass, char> 

myclass是用戶定義的類 - 我希望我的理解是正確的。但我不明白的是下面的部分 -

template<typename T, typename... Options> 
    struct implementation_defined { 
    // types 
    typedef node_allocator allocator; 
    typedef std::size_t size_type; 
    }; 
    // construct/copy/destruct 
    queue(void); 
    template<typename U> 
    explicit queue(typename node_allocator::template rebind<U>::other const &); 

看來另一個模板內的模板 - 但是我們如何提供類型的實例

template<typename T, typename... Options> 

template<typename U> 

有沒有辦法像模板一樣理解模板構造,以理解模板方法是什麼參數和返回類型?

回答

1

template<typename U>是一個queue構造函數模板。它的參數是從調用它時傳遞的參數中推導出來的。

struct implementation_defined是一個普通的嵌套類,它實際上並不是一個模板本身。它看起來像文檔問題,因爲它實際上是defined as

struct implementation_defined 
{ 
    typedef node_allocator allocator; 
    typedef std::size_t size_type; 
};