如何解决如何在集合中存储多态对象
如何定义重载的比较运算符或比较函子,以便可以创建A类集。我有一个Base类,该类具有int成员变量_state和一个派生类A。
#include <vector>
#include <set>
class Base{
int _state;
protected:
virtual void fun() = 0;
public:
bool operator < (const Base & t)
{
return (this->_state < t._state);
}
Base (int s): _state(s){}
virtual ~Base() = default;
};
class A: public Base{
public:
A(int s): Base(s){}
void fun() override{}
};
int main()
{
A a(5);
std::set<A> s;
s.insert(a);
return 0;
}
解决方法
如何定义重载的比较运算符或比较函子,以便我可以创建A类集。
Set元素是const,因此这种比较运算符必须接受const参数。
您的重载比较运算符不接受const左手参数,因为您没有const限定它。解决方案:添加const限定词:
bool operator < (const Base & t) const
我建议不要将比较运算符定义为非静态成员函数,因为它们缺乏自由函数的对称性。您可能不太可能犯写bool operator < (Base & l,const Base & r)
的错误,因为对称使错误显而易见。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。