Как я могу заставить предупреждение компилятора с оператором ==?

Это продолжение моего предыдущий вопрос.

У меня есть куча кода 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 заявление.

3

Решение

Вы пробовали просто не определять operator== совсем? Я не думаю, что есть неявное operator== для классов C ++. Таким образом, ваш последний фрагмент кода должен выдать ошибку компилятора, если вы просто опустите определение operator==,

4

Другие решения

Просто делаю operator== undefined и private должны вызвать ошибку. Но если вы хотите сравнить 2 объекта, я не понимаю, почему вы не определяете operator== как вам это нужно.

bool operator==(const DataId &other){
return IsEqual(other);//is this the function you want to compare with?
}
1


Вы можете использовать static_assert, если у вас есть доступ к C ++ 11:

class DataId {
// ...

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

Просто не определяйте operator == вообще, и компилятор потерпит неудачу с ошибкой в ​​момент использования.

-1
По вопросам рекламы [email protected]