【发布时间】:2011-04-18 10:10:23
【问题描述】:
STL库类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 */
/* --------------------------------------------------------------- */
我见过的大多数 std::queue 实现都以与您在上面的代码中看到的相同方式实现“value_type”和“size_type”。所以,模板参数 'T' 只用于模板参数 'container' (std::deque) 的默认参数。
我的意思是,我不认为忽略上面声明示例中的浮点规范是“好的”;不管它是否有效。
【问题讨论】:
-
参见this answer。
标签: c++ templates stl containers