Есть ли способ принудительно использовать ключевое слово С++ 11 override
в Visual С++ 2012?
(т.е. если я забуду сказать override
, то я хочу получить предупреждение/ошибку.)
Есть ли способ принудительно использовать ключевое слово С++ 11 override
в Visual С++ 2012?
(т.е. если я забуду сказать override
, то я хочу получить предупреждение/ошибку.)
У С++ 11 почти было то, что вы хотите.
Первоначально ключевое слово override
было частью более крупного предложения (N2928), которое также включало возможность принудительного использования его использования:
class A
{
virtual void f();
};
class B [[base_check]] : public A
{
void f(); // error!
};
class C [[base_check]] : public A
{
void f [[override]] (); // OK
};
Атрибут base_check
сделает ошибку для переопределения виртуальной функции без использования ключевого слова override
.
Также существовал атрибут hiding
, который говорит, что функция скрывает функции в базовом классе. Если используется base_check
, и функция скрывает один из базового класса, не используя hiding
, это ошибка.
Но большая часть предложения была отброшена, и только функции final
и override
были сохранены как "идентификаторы со специальным значением", а не атрибуты.
Есть несколько способов сделать это в VC++ и аналогичных способах с GCC.
VC++
Ниже приведены соответствующие номера предупреждений в VC++:
C4263 (level 4) 'function': member function does not override any base class virtual member function
C4266 (level 4) 'function': no override available for virtual member function from base 'type'; function is hidden
Чтобы включить эти два предупреждения, вы можете использовать одну из следующих опций:
Включите выше два предупреждения, используя код.
#pragma warning(default:4263)
#pragma warning(default:4266)
Включите два выше предупреждения в настройках проекта> C/C++> Командная строка, а затем введите /w34263/w34266. Здесь опция /wNxxxx означает включение предупреждений xxxx на уровне N (N = 3 - уровень по умолчанию). Вы также можете сделать /wdNxxxx, который отключает предупреждение xxxx на уровне N.
НКУ
GCC 5. 1+ добавил новое предупреждение предложить-переопределение, которое вы можете передать как параметр командной строки -Wsuggest-override
.
лязг
Clang 3. 5+ имеет -Winconsistent-missing-override
, однако это обнаруживает только случаи, когда некоторые переопределяющие члены или базовые классы используют override
но другие переопределяющие члены этого не делают. Возможно, вы захотите взглянуть и на инструмент clang-tidy.