Предыстория:
Я создаю иерархию составных структур данных словаря в Objective-C и наследую от NSMutableDictionary, чтобы эти классы можно было использовать везде, где требуется NSDictionary/NSMutableDictionary. (Чтобы люди не думали, что я изобретаю велосипед, каждый использует CFMutableDictionaryRef, а также некоторая дополнительная структура, в которой хранятся ключи в отсортированном порядке, порядке вставки и т. д.) В соответствии с документацией Apple я переопределил необходимые Примитивы NSDictionary и Примитивы NSMutableDictionary который используют все остальные методы в этих классах.
Цель:
Поскольку я стремлюсь максимально полно документировать API для своего фреймворка, мне бы хотелось, чтобы документация для моих пользовательских подклассов (создана Doxygen), чтобы включить описания наиболее распространенных методов NS(Mutable)Dictionary, чтобы пользователям не приходилось просматривать другую страницу только для методов, которые наследует конкретный пользовательский словарь без изменений. Кроме того, иногда документация должна отражать другую функциональность, вызванную переопределенными примитивными методами, хотя реализация метода не отличается от NS(Mutable)Dictionary.
Проблема:
Я не получаю ошибок/предупреждений, когда задокументированы только переопределенные методы. Если я добавлю комментарии, которые документируют унаследованные методы, Doxygen жалуется (и не будет создавать указанную документацию), если я не добавлю прототип метода в заголовочный файл. Если я добавлю прототип, компилятор выдаст предупреждение о том, что реализация завершена, поскольку он не включает определение метода для объявленного метода. Очевидно, что это тот случай, когда метод существует в родительском классе, но компилятор настаивает на его реализации, поскольку прототип по существу переопределен в подклассе.
Вопросы:
- Можно ли заставить Xcode/gcc подавлять предупреждения «определение метода для «X» не найдено» для методов, унаследованных от родительского класса?
- Можно ли заставить Doxygen создать документацию для метода, для которого не существует описания? Я попытался использовать команду
\fn
, но получил те же результаты. - Можно ли обмануть Doxygen, заставив его думать, что документация, которую я пишу, на самом деле относится к NSMutableDictionary, но при этом она отображается для всех моих пользовательских подклассов?
Изменить:
Насколько я могу судить, ответ на первый вопрос и да, и нет. Технически, используя параметр -Wno-protocol
(или снятие флажка с предупреждения «Неполные протоколы Objective-C» в настройках сборки Xcode) действительно приводит к тому, что GCC подавляет предупреждения времени компиляции о классах, которые, по-видимому, не реализуют все методы протокола. Однако это маскирует проблему для классов, которые действительно не реализуют все необходимые методы. Для создания фреймворка, который использует протоколы, это действительно не вариант. В настоящее время GCC, похоже, не знает о методах, унаследованных от связанного (не исходного) родительского класса.