你能帮我理解这个C++模板代码吗

Can you help me understand this C++ template code?

本文关键字:C++ 代码      更新时间:2023-10-16

Hya,

有人能告诉我这东西是怎么工作的吗?

template <typename T,
template <typename ELEM> class CONT = std::deque >
class Stack {
private:
CONT<T> elems; // elements
public:
void push(T const&); // push element
void pop(); // pop element
T top() const; // return top element
bool empty() const { // return whether the stack is empty
return elems.empty();
}
};

我不明白的是:template class V或这样说"template class CONT=std::deque">

我把它想象成

template <class>
class CONT = std::deque // here CONT is templatized class declaration.

但困扰我的是,我们如何才能为类名CONT分配一些东西,而不是编写它的定义(直到现在我已经这样做了(:

template <class>
class CONT{
//def
}

还有一件事:

template <class> // why its only class written in angle bracket there should be also be name
like : template<class ty>

非常感谢,非常感谢任何帮助(

我不明白的是:模板类V

你的问题中没有这句话,所以我没办法回答。

template< template <typename ELEM> class CONT = std::deque >
class Stack

这是一个模板模板参数的声明。将模板传递到Stack模板中,然后Stack可以在内部使用它。

= std::deque部分是默认值,以防未指定CONT参数。(std::deque是预定义的模板。(

但是,这将不起作用,因为std::deque需要两个参数。这将起作用:

template< template <typename ELEM, typename ALLOC> class CONT = std::deque >
class Stack

然而CCD_ 6和CCD_;它们的存在只是为了澄清所需模板的参数列表。因此,您可以省略它们:

template< template <typename, typename> class CONT = std::deque >
class Stack

这不是一个对象赋值。这只是模板说明符中的语法,用于指定默认类型参数(如果没有提供(。这不是该类型的定义。