これは私の以前の質問の続きです。
私はこのような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
}
2つのオブジェクトポインタで演算子を使用して検出するコンパイラの警告がない==
ため、別の解決策を探しています。
1つの考えは、C ++クラスを使用==
し、コンパイラーが文句を言うような方法で演算子をオーバーロードすることでした。
私はObjective-Cほど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
ステートメントでコンパイルエラー/警告を引き起こすために思いつくことができる構文上のトリックはありますか?