这是我earlier question的后续内容。
我有一堆像这样的Objective-C代码:
typedef long DataKey;
DataKey x;
DataKey y;
if (x == y) {
// do stuff
}
我现在需要将DataKey
更改为对象而不是long
。如果我创建类并进行一系列全局搜索和替换,我的代码现在就像这样:
@interface DataKey : NSObject
DataKey *x;
DataKey *y;
if (x == y) { // uh-oh - this is now bad, I need isEqual: here
}
由于没有编译器警告要使用==
运算符检测两个对象指针,我正在寻找另一种解决方案。
一种想法是使用C ++类并以编译器会抱怨的方式重载==
运算符。
我不太了解C ++和Objective-C。我已经能够编写C ++类,现在我的代码实际上会导致调用operator==
方法。现在我需要帮助提出一种调整代码的方法,以便我收到编译器警告。
这是C ++类:
class DataId {
public:
DataId();
bool operator==(const DataId &other);
};
现在我有一些像这样的Objective-C ++代码:
DataId x;
DataId y;
if (x == y) { // I need a compiler warning/error here
}
是否有语法技巧可以在if
语句中引发编译错误/警告。
答案 0 :(得分:4)
您是否尝试过根本不定义operator==
?我认为C ++类没有隐式operator==
。因此,如果您不考虑operator==
的定义,那么您的最后一段代码应该抛出编译器错误。
答案 1 :(得分:1)
只是使operator==
未定义和私有应该触发错误。但是如果你想比较2个对象,我不明白你为什么不在你需要的时候定义operator==
。
bool operator==(const DataId &other){
return IsEqual(other);//is this the function you want to compare with?
}
答案 2 :(得分:-1)
<击> 如果您有权访问C ++ 11,则可以使用static_assert:
class DataId {
// ...
bool operator==(const DataId& other)
{
static_assert(false, "enter error message here.");
return true;
}
};
击> <击> 撞击>
根本不要定义operator ==并且编译器将在使用时失败并显示错误。