gpt4 book ai didi

c++ - 专门用于自定义容器的 std::swap 算法

转载 作者:太空宇宙 更新时间:2023-11-04 15:55:18 24 4
gpt4 key购买 nike

我写了自己的 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 类中,名称 swapStack::swap

如果你想使用一些其他的功能,你需要提供一个明确的范围,如

::swap(container, other.container);

请注意使用 :: 范围运算符来使用全局范围内的 swap 函数。

关于c++ - 专门用于自定义容器的 std::swap 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59176588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com