Как использовать функцию IsKindOf () для проверки двух объектов? - PullRequest
1 голос
/ 10 мая 2011

Я знаю, что функция ISKINDOF () используется для сравнения двух объявленных объектов класса DECLARE_DYNAMIC .

Но проблема в том, как сравнить указатели объектов, которые не объявлены DECLARE_DYNAMIC .

    CSample *sample1, *sample2;
    sample1.ISKINDOF(sample2);

определенно приведенный выше пример покажет ошибку.

Есть ли какая-нибудь функция для проверки вышеуказанных ограничений?

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

Обратите внимание, что это решение требует извлечения из CObject и использования DECLARE_DYNAMIC и IMPLEMENT_DYNAMIC. Есть ли какая-то причина, по которой вы не можете их использовать?

Получить класс времени выполнения объекта, который должен быть таким же или суперклассом другого объекта. Предположим, вы думаете, что sample2 - это тот же класс или суперкласс sample1:

CRuntimeClass* pClass = sample2->GetRunTimeClass();
BOOL sample1IsKindOfSample2 = sample1->IsKindOf(pClass);
0 голосов
/ 12 мая 2011

Если ваш код VC ++ скомпилирован / GR (который используется по умолчанию в последних компиляторах / IDE), вы можете использовать dynamic_cast для изучения типа объектов во время выполнения.

Однако, как намекает DWO в своем комментарии, проекты, использующие ISKINDOF и др., Часто следует заменять другими проектами (такими как виртуальная функция).

Martyn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...