Existe-t-il un moyen d’imposer l’utilisation du mot clé de override
C ++ 11 dans Visual C ++ 2012?
(c.-à-d. si j’oublie de dire override
, alors je veux recevoir un avertissement / une erreur.)
C ++ 11 a presque eu ce que vous voulez.
À l’origine, le mot clé override
faisait partie d’une proposition plus vaste ( N2928 ) qui incluait également la possibilité d’appliquer son utilisation:
class A { virtual void f(); }; class B [[base_check]] : public A { void f(); // error! }; class C [[base_check]] : public A { void f [[override]] (); // OK };
L’atsortingbut base_check
ferait une erreur pour remplacer une fonction virtuelle sans utiliser le mot clé override
.
Il y avait aussi un atsortingbut hiding
qui dit qu’une fonction cache des fonctions dans la classe de base. Si base_check
est utilisé et qu’une fonction en cache une de la classe de base sans hiding
c’est une erreur.
Mais la majeure partie de la proposition a été abandonnée et seules les caractéristiques final
et de override
ont été conservées, sous forme d’identificateurs ayant une signification particulière plutôt que des atsortingbuts.
Il y a peu de façons de faire cela dans VC ++ et des manières équivalentes avec GCC également.
VC ++
Vous trouverez ci-dessous les numéros d’avertissement pertinents dans 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
Pour activer ces deux avertissements, vous pouvez utiliser l’une des options suivantes:
Activer au-dessus de deux avertissements en utilisant du code.
#pragma warning(default:4263) #pragma warning(default:4266)
Activez les deux avertissements ci-dessus dans les parameters du projet> C / C ++> Ligne de commande, puis entrez / w34263 / w34266. Ici, l’option / wNxxxx signifie activer les avertissements xxxx dans le niveau N (N = 3 est le niveau par défaut). Vous pouvez également faire / wdNxxxx qui désactive l’avertissement xxxx dans le niveau N.
GCC
GCC 5.1+ a ajouté un nouvel avertissement suggérant que vous pouvez passer en tant qu’option de ligne de commande -Wsuggest-override
.
Bruit
Clang 3.5+ a -Winconsistent-missing-override
mais cela ne détecte que les cas si la classe de base utilise la substitution mais pas le parent. Vous voudrez peut-être aussi jeter un coup d’œil à l’outil clang-tidy.