Это продолжение моего предыдущий вопрос.
У меня есть куча кода 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
заявление.
Вы пробовали просто не определять operator==
совсем? Я не думаю, что есть неявное operator==
для классов C ++. Таким образом, ваш последний фрагмент кода должен выдать ошибку компилятора, если вы просто опустите определение operator==
,
Просто делаю operator==
undefined и private должны вызвать ошибку. Но если вы хотите сравнить 2 объекта, я не понимаю, почему вы не определяете operator==
как вам это нужно.
bool operator==(const DataId &other){
return IsEqual(other);//is this the function you want to compare with?
}
Вы можете использовать static_assert, если у вас есть доступ к C ++ 11:
class DataId {
// ...
bool operator==(const DataId& other)
{
static_assert(false, "enter error message here.");
return true;
}
};
Просто не определяйте operator == вообще, и компилятор потерпит неудачу с ошибкой в момент использования.