3

这是我之前的问题的后续。

我有一堆像这样的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语句上的编译错误/警告。

4

3 回答 3

4

您是否尝试过根本不定义一个operator==?我不认为operator==C++ 类是隐含的。因此,如果您不定义operator==.

于 2012-12-06T02:49:03.720 回答
1

只是将operator==undefined 和 private 设置为会触发错误。但是,如果您想比较 2 个对象,我不明白您为什么不根据operator==需要定义它。

bool operator==(const DataId &other){
    return IsEqual(other);//is this the function you want to compare with?
}
于 2012-12-06T02:49:11.637 回答
-1

如果您有权访问 C++11,则可以使用 static_assert:

class DataId {
    // ...

    bool operator==(const DataId& other)
    {
        static_assert(false, "enter error message here.");
        return true;
    }
};

根本不定义 operator == ,编译器将在使用时出错并失败。

于 2012-12-06T02:46:52.390 回答