我试图阅读Boost Class template queue并找到以下类课程内容:
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>
有没有办法理解像类这样的模板构造,以了解模板方法的参数和返回类型是什么?
答案 0 :(得分:1)
template<typename U>
是queue
构造函数模板。它的参数是从调用时传递的参数推导出来的。
struct implementation_defined
是一个常规嵌套类,实际上并不是模板本身。它看起来像文档问题,因为它实际上是defined as
struct implementation_defined
{
typedef node_allocator allocator;
typedef std::size_t size_type;
};