C ++无法使用堆栈模板调用函数

问题描述

请告诉我可能是什么问题。我有两个自己的堆栈类(stackm和stackl),以及堆栈排序功能

template <class TStack>
void quick_sort_stack(TStack &s,TStack L,TStack G,TStack E) {
// Sort stack
}

要对数组排序,请调用函数

template <typename T>
void quick_sort_stack(stackm<T> &s) {
    quick_sort_stack(s,stackm<T>(s.size()),stackm<T>(s.size()));
}

template <typename T>
void quick_sort_stack(stackl<T> &s) {
    quick_sort_stack(s,stackl<T>(),stackl<T>());
}

它有效。但是当我尝试对std :: stack

做同样的事情时
template <typename T>
void quick_sort_stack(std::stack<T> &s) {
    quick_sort_stack(s,std::stack<T>(),std::stack<T>());
}

我遇到了错误

(no matching function for call to quick_sort_stack(std::stack<int> &,std::stack<int>,std::stack<int>)):

enter image description here

为什么会这样,我该如何解决

解决方法

我有一个这样的结构:

template <typename T>
void quick_sort_stack(stackm<T> &s) {
    quick_sort_stack(s,stackm<T>(s.size()),stackm<T>(s.size()));
}

template <typename T>
void quick_sort_stack(stackl<T> &s) {
    quick_sort_stack(s,stackl<T>(),stackl<T>());
}

template <typename T>
void quick_sort_stack(stack<T> &s) {
    quick_sort_stack(s,stack<T>(),stack<T>());
}

template <class TStack>
void quick_sort_stack(TStack &s,TStack L,TStack G,TStack E) {
    // Sorted function
}

将排序功能移到其余位置后,程序将启动:

template <class TStack>
void quick_sort_stack(TStack &s,TStack E) {
    // Sorted function
}

template <typename T>
void quick_sort_stack(stackl<T> &s) {
    quick_sort_stack(s,stackl<T>());
}
// Another...