C++ 带有专用成员函数的默认模板参数

C++ 带有专用成员函数的默认模板参数,c++,templates,C++,Templates,我有一个类模板堆栈,带有默认模板参数和pop()函数,它是专门的成员函数 template <typename T,typename CONT = vector<T> > class Stack { public: void push(T arg); T top()const; void pop(); bool isEmpty() const; private: CONT elems_; }; template <typename T,typename

我有一个类模板堆栈,带有默认模板参数和pop()函数,它是专门的成员函数

template <typename T,typename CONT = vector<T> >
class Stack
{
public:
 void push(T arg);
 T top()const;
 void pop();
 bool isEmpty() const;
private:
 CONT elems_;
};

template <typename T,typename CONT>
void Stack<T,CONT>::pop()
{
 elems_.pop_back();
}
模板
类堆栈
{
公众:
无效推力(T arg);
T top()常数;
void pop();
bool isEmpty()常量;
私人:
续:;
};
模板
void Stack::pop()
{
elems_u.pop_back();
}
//专门的pop功能

template<>
void Stack<int>::pop()
{
 cout << "Called Specialized ";
 elems_.pop_back();
}
模板
void Stack::pop()
{
这不叫专业的吗?为什么?
堆叠mystack;
mystack.push(10);
mystack.pop();-->这调用模板一为什么?

由于默认参数,您的专业化是

template<>
void Stack<int, std::vector<int>>::pop()
{
    cout << "Called Specialized ";
    elems_.pop_back();
}
模板
void Stack::pop()
{
这不能叫专业吗
堆栈2;
2.推(10);
mystack2.pop();//-->这将调用专门的
但不匹配的类型将调用泛型:

Stack<int, list<int>> mystack3;
mystack3.push(10);
mystack3.pop(); // ---> this calls generic one

Stack<char> mystack4; // Stack<char, std::vector<char>>
mystack4.push(10);
mystack4.pop(); // ---> this calls generic one
stackmystack3;
3.推(10);
mystack3.pop();//-->这将调用泛型
堆栈mystack4;//堆栈
4.推(10);
mystack4.pop();//-->这将调用泛型

在这里都调用专用函数-请尝试使用std::list。在这种情况下,为什么您认为它应该调用专用函数?因为这两种类型是相同的。谢谢@Jared42在这方面的帮助
Stack<int> mystack1; // Stack<int, std::vector<int>>
mystack1.push(10);
mystack1.pop(); // ---> this calls specialized

Stack<int, vector<int>> mystack2;
mystack2.push(10);
mystack2.pop(); // ---> this calls specialized
Stack<int, list<int>> mystack3;
mystack3.push(10);
mystack3.pop(); // ---> this calls generic one

Stack<char> mystack4; // Stack<char, std::vector<char>>
mystack4.push(10);
mystack4.pop(); // ---> this calls generic one