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();
}
};
我不明白的是: 模板类V或说这个“模板类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>
非常感谢,非常感谢任何帮助。
答案 0 :(得分:1)
这不是对象分配。它只是模板说明符中的语法,用于指定未提供默认类型参数的默认类型参数。 不该类型的定义。
答案 1 :(得分:1)
我不明白的是:模板类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
但ELEM
和ALLOC
实际上并没有命名;它们的存在仅仅是为了阐明所需模板的参数列表是什么。所以,你可以省略它们:
template< template <typename, typename> class CONT = std::deque >
class Stack