【发布时间】:2016-12-07 03:56:21
【问题描述】:
我正在重构我的一些代码以使用结构而不是单个对象。
由于此更改,我需要为“==”添加运算符,以便我现有的涉及函数的向量可以正确评估存储在向量中的对象。
class IdentifyingClass; //forward declare class
Class ReturnData
{
public:
IdentifyingClass* value;
float some_trivial_additional_data;
bool operator==(const ReturnData& query_obj)
{
return value == query_obj.value;
}
bool operator==(const IdentifyingClass* query_obj)
{
return value == query_obj;
}
}
我所有依赖于此类的现有代码都可以正常运行。我认为这是一个开放和封闭的重构。
然后我在使用此类类型的特定边缘案例中的不同解决方案中的不同位置使用它。我正在尝试使用这个
IdentifyingClass* object;
const std::vector<ReturnData>& data_vector = GetDataFromPlace();
if(std::find(data_vector.begin(), data_vector.end(), object) != data_vector.end()))
{
//do special action;
}
现在我正在生成一个向量“==”比较错误,告诉我我没有“const ReturnData”的左侧“==”操作数。
【问题讨论】:
-
不,我只是想提供有关我正在做的事情的上下文,然后解决方案是可以接受的。这是一篇问答帖。
-
我投票结束这个问题,因为它不是真正的问题
-
好吧。如果我不小心误用了堆栈溢出,我深表歉意。我只是想做出贡献。
-
@Jakey113G 不妨评论一下——你为什么想要像运算符 == 那样带有指针的反直觉的东西?如果我想比较指针值是否相等,比如在重载赋值运算符中怎么办?当 C++ 程序员看到正在比较的指针时,它期望指针正在被比较。如果他们想要比较一个对象,那么用户应该知道取消引用指针并使用它。引入带指针的重载运算符 == 会增加编译错误的风险,或者更糟糕的是,在运行时发生奇怪事件。
标签: c++ vector operator-overloading