gpt4 book ai didi

c++ - 从 C++ 中的 vector 继承类调用 super 运算符==

转载 作者:太空狗 更新时间:2023-10-29 20:34:49 25 4
gpt4 key购买 nike

我正在尝试实现一个继承自 vector 的类的比较运算符。

我希望它首先比较自己的新属性,然后使用从 vector 继承的运算符。这是一个例子:

struct A : vector<int> {
int a;
bool operator==(const A& other) {
return a == other.a && vector::operator==(other);
}
}

但是我收到了这个错误:

no member named 'operator==' in 'std::__1::vector<int, std::__1::allocator<int> >'

与 STL 中的其他类的结果相同,但如果我从我自己的另一个类继承,效果会很好。

这是我正在使用的 vector 的实现:

inline _LIBCPP_INLINE_VISIBILITY
bool
operator==(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y)
{
const typename vector<_Tp, _Allocator>::size_type __sz = __x.size();
return __sz == __y.size() && _VSTD::equal(__x.begin(), __x.end(), __y.begin());
}

我做错了什么?

最佳答案

vector的相等运算符是一个非成员函数,这意味着您不能那样调用它。你最好做这样的事情:

struct A : std::vector<int> {
int a;
bool operator==(const A& other) {
vector const& self = *this;
return a == other.a && self == other;
}
};

但是,我不建议从标准容器继承。相反,你应该有一个 std::vector<int>数据成员(组合继承)。

关于c++ - 从 C++ 中的 vector 继承类调用 super 运算符==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158027/

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