2017-08-04 76 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; 
};