C++ 你能帮我理解这个C++;模板代码?
嗨 谁能告诉我这东西是怎么工作的吗C++ 你能帮我理解这个C++;模板代码?,c++,templates,C++,Templates,嗨 谁能告诉我这东西是怎么工作的吗 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;
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();
}
};
模板
类堆栈{
私人:
CONT elems;//元素
公众:
void push(T const&);//push元素
void pop();//pop元素
T top()const;//返回top元素
bool empty()常量{//返回堆栈是否为空
返回elems.empty();
}
};
我不明白的是:
模板类V或说“模板类CONT=std::deque”
我把这想象成
template <class>
class CONT = std::deque // here CONT is templatized class declaration.
模板
class CONT=std::deque//这里CONT是模板化的类声明。
但困扰我的是,我们如何才能将某些东西分配给类名CONT,而不是编写它的定义(我到目前为止都是这么做的):
模板
类CONT{
//def
}
还有一件事:
template <class> // why its only class written in angle bracket there should be also be name
like : template<class ty>
template//为什么它唯一一个用尖括号写的类也应该是name
比如:模板
非常感谢,非常感谢您的帮助)这不是对象分配。它只是模板说明符中的语法,用于指定如果未提供默认类型参数,则默认类型参数应该是什么。这不是那种类型的定义 我不明白的是:模板类V 你的问题中没有这样一句话,所以我没办法
template< template <typename ELEM> class CONT = std::deque >
class Stack
然而ELEM
和ALLOC
实际上并没有命名任何东西;它们的存在只是为了澄清所需模板的参数列表是什么。因此,您可以省略它们:
template< template <typename, typename> class CONT = std::deque >
class Stack
template
类堆栈
这不起作用std::deque
接受两个参数(一个是可选的),因此只能作为带有两个参数的template
template参数传递。在这里,您可以将std::deque
(而不是std::deque
)作为普通模板参数传递:这就是std::stack
的工作方式。一般来说,模板参数不够灵活,不值得麻烦地使用它们(元编程上下文中可能除外)。我只修了一个。@Tomalak:是的,但你让它更糟。@Potatoswatter:啊,对不起,是的,我修了。解析失败!他说了什么。因此,CONT
是Stack
的第二个模板参数,CONT
本身就是一个模板类,最后,CONT
的默认值是std::deque
@Ilkka:Yes,尽管CONT
作为模板类是OP代码中的语法错误之一,因为他实际上并没有这样对待它。是的,我在原力上太弱了,无法在不把它扔给编译器的情况下检测到它。谢谢你的澄清:)@Ilkka:你的力量依然强大在“我不明白的是:模板类V”这一行之后,你能用更基本的形式详细解释一下吗?或者说“模板类CONT=std::deque”。非常感谢)
template< template <typename ELEM, typename ALLOC> class CONT = std::deque >
class Stack
template< template <typename, typename> class CONT = std::deque >
class Stack