我试图实现从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中的其他类相同的结果,但如果我从我自己的另一个类继承,它会很好。
这是我使用的矢量的实现:
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());
}
我做错了什么?
答案 0 :(得分:5)
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>
数据成员(合成而不是继承)。