我写了自己的 vector 和堆栈,它们是类模板,都工作正常,现在我想为我的堆栈专门化 std::swap 算法,所以我定义了一个函数模板交换作为 vector 的 friend ,它使用在 vector 内部交换。然后我在堆栈中定义了一个交换成员函数。但是如果我尝试调用该交换函数,它无法编译。 vs2019 说“交换函数不接受两个参数”。我认为堆栈类中的交换将使用参数依赖查找,但它没有那样做。请帮助我,正确的方法是什么?多谢。 vector和stack的部分代码如下
vector .h
template<class Object>
void swap(Vector<Object>& lhs, Vector<Object>& rhs) {
lhs.swap(rhs);
}
template<class Object>
class Vector {
//.....
friend void swap<>(Vector<Object>& lhs, Vector<Object>& rhs);
public:
//...
void swap(Vector &rhs){
//....
}
}
堆栈.h
#include"Vector.h"
template<class Object,class Container>
class Stack {
//......
void swap(Stack &other) {
swap(container, other.container);
}
主要.cpp
//....
int main() {
//....
Stack<int,Vector<int>>s1,s2;
s1.swap(s2);
}
//....
最佳答案
这是一个简单的名称隐藏案例:在 Stack
类中,名称 swap
是 Stack::swap
。
如果你想使用一些其他的功能,你需要提供一个明确的范围,如
::swap(container, other.container);
请注意使用 ::
范围运算符来使用全局范围内的 swap
函数。
关于c++ - 专门用于自定义容器的 std::swap 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59176588/