Задача
Я пытаюсь выяснить, как лучше всего добавить идентификатор С++ 0x override
ко всем существующим методам, которые уже переопределены в большой части кода на С++, не выполняя его вручную.
(У нас много, много сотен тысяч строк кода, и сделать это вручную было бы полным без стартера.)
Текущая идея
Наши стандарты кодирования говорят о том, что мы должны добавить ключевое слово virtual
против всех неявно виртуальных методов в производных классах, даже если они строго необходимы (чтобы помочь понять).
Итак, если бы я был с script сам добавлением, я бы написал script, который читал все наши заголовки, нашел все функции, начинающиеся с виртуального, и вставлял override
перед следующей точкой с запятой. Затем скомпилируйте его в компиляторе, поддерживающем override
, и исправим все ошибки в базовых классах.
Но я бы очень не хотел использовать этот домашний стиль, как:
- это, очевидно, будет утомительным и подверженным ошибкам.
- не каждый запомнил, каждый раз, добавить ключевое слово virtual, поэтому этот метод пропустит некоторые существующие переопределения.
Есть ли существующий инструмент?
Итак, есть ли уже инструмент, который анализирует код на С++, обнаруживает существующие методы, которые переопределяют, и добавляет override
к их объявлениям?
(Мне известны инструменты статического анализа, такие как PC-lint, которые предупреждают о функциях, которые выглядят так, как будто они должны быть переопределены. на самом деле проделает наш код, так что будущие ошибки в переопределения будут обнаружены во время компилятора, а не позже в статическом анализе)
(В случае, если у кого-то возникает соблазн указать, что С++ 03 не поддерживает "переопределить"... На практике я бы добавил макрос, а не фактический "переопределяющий" идентификатор, чтобы использовать наши код на старых компиляторах, которые не поддерживают эту функцию. Поэтому после добавления идентификатора я запустил отдельный script, чтобы заменить его на любой макрос, который мы собираемся использовать...)
Спасибо заранее...