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