STL库类的std ::队列的向前声明如下:为什么std :: queue允许冗余类型规范?
namespace std {
template<typename T, class container = deque<T>> class queue
}
这意味着我们可以宣布类型队列的对象有不同类型的规格是这样的:
std::queue<float, std::deque<std::string>> string_queue;
为什么这个有可能吗?那岂不是更类型安全申报队列是这样的:
template<class implementation>
class queue_base
{
private:
implementation m_impl;
/* ----------------------------------------------------------- */
public:
typedef implementation container_type;
typedef typename implementation::size_type size_type;
typedef queue_base<implementation> this_type;
typedef typename implementation::value_type value_type;
/* ----------------------------------------------------------- */
queue_base ();
queue_base (queue_base const& other);
explicit queue_base(container_type const& other);
/* ----------------------------------------------------------- */
value_type& back();
value_type const& back() const;
bool empty() const;
value_type& front();
value_type const& front() const;
void pop ();
void push (value_type const& value);
size_type size() const;
/* ----------------------------------------------------------- */
}; /* template<class> class queue_base */
/* --------------------------------------------------------------- */
性病的大多数实现::队列我见过实施同样的方式,你可以在看“VALUE_TYPE”和“SIZE_TYPE”我上面的代码。因此,模板参数'T'仅用于模板参数'container'(std :: deque)的默认参数。
我的意思是,我不认为上面的声明示例中的float规范被忽略是“很好”的;不管它是否有效。
请参阅[此答案](http://stackoverflow.com/questions/4962518/templates-and-stl/4962708#4962708)以及。 – GManNickG 2011-04-18 10:32:08