Хорошо, чтобы сравнить указатели, возвращаемые макросом RUNTIME_CLASS ()? - PullRequest
3 голосов
/ 15 июня 2010

У меня есть функция, которая берет список из CRuntimeClass указателей для настройки представления.Я хотел бы вернуться, ничего не делая, если функция вызывается со списком тех же классов, которые уже настроены.Сохранение значений указателя и сравнение их при следующем вызове в настоящее время работает, но я хочу убедиться, что это допустимо, а не то, что просто работает.Может быть, в моем doc-search-fu отсутствует, но я не могу найти нигде, который бы гарантировал, что значение указателя, возвращенное макросом RUNTIME_CLASS () для данного класса, будет одинаковым на протяжении всей жизни программы.Самое близкое, что я мог найти, - это документы для CObject::GetRuntimeClass():

Для каждого класса, производного от CObject, существует одна структура CRuntimeClass.

Это подразумевает, что значение указателя не должно изменяться, но точно не указывает его.У кого-нибудь есть что-то более конкретное по этому поводу?Или есть лучший способ сравнить CRuntimeClasses?

Ответы [ 2 ]

2 голосов
/ 15 июня 2010

Никаких таких гарантий не задокументировано, хотя это вероятно. Вы должны использовать CObject :: IsKindOf ().

1 голос
/ 15 июня 2010

Взглянув на afx.h, плюс небольшая отладка показывает, что RUNTIME_CLASS() возвращает указатель на статический член: static CRuntimeClass class##class_name (как видно из определения макроса DECLARE_DYNAMIC(class_name)).

Поскольку элемент является статическим, указатель на него не изменяется во время выполнения. Другими словами static ваша гарантия.

...