Как Можно перегрузить Оператор ==, если необходимо проверить указатель на nullptr

89
10 января 2022, 09:20

Допустим в Классе есть указатель, тогда каким образом можно его проверить на nullptr. При попытке использовать простой if( a == nullptr) выдаёт ошибку C2678.

error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "plane_metric::plane" (или приемлемое преобразование отсутствует)

Я пытаюсь сделать это:

if (this->frame[index] == nullptr) {
    this->empty_index--;
    this->busy_index++;
}
return this->frame[index];

frame - Это массив типа plane< Field> В Классе dynamic_frame; Field - Это Шаблон;

Answer 1

Навскидку пачка решений...

class Pointer1
{
public:
    void* ptr = nullptr;
};
class Pointer2
{
public:
    void* getptr() const { return ptr; }
private:
    void* ptr = nullptr;
};
class Pointer3
{
public:
    operator const void*() const { return ptr; }
private:
    void* ptr = nullptr;
};
class Pointer4
{
public:
    bool operator ==(const void * p) const { return ptr == p; }
private:
    void* ptr = nullptr;
};
class Pointer5
{
public:
    bool is_null() const { return ptr == nullptr; }
private:
    void* ptr = nullptr;
};

int main(int argc, const char * argv[])
{
    Pointer1 p1;
    if (p1.ptr == nullptr)       { cout << "p1 nullptr\n"; }
    Pointer2 p2;
    if (p2.getptr() == nullptr)  { cout << "p2 nullptr\n"; }
    Pointer3 p3;
    if (p3 == nullptr)           { cout << "p3 nullptr\n"; }
    Pointer4 p4;
    if (p4 == nullptr)           { cout << "p4 nullptr\n"; }
    Pointer5 p5;
    if (p5.is_null())            { cout << "p5 nullptr\n"; }
}
READ ALSO
c++ подключение файлов

c++ подключение файлов

Как подключить файл если его название записано в переменной?

88
Кто поможет с написанием программы? [закрыт]

Кто поможет с написанием программы? [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

228
Проблема с редактированием кода при отладке

Проблема с редактированием кода при отладке

Отлаживаю динамическую библиотеку (DLL), хочу отредактировать код и продолжить, собственно открываю процесс через Local Windows Debugger , и пытаюсь...

94
Окружность sfml

Окружность sfml

Как нарисовать 1/4 окружности в SFML?

68