Bel article!
Telles que j’avais lue la séparation des responsabilités, avec le NVI on adresse la fonction publique au code utilisateur (et aux développeurs concernés), et on adresse la fonction virtuelle au code "enfant" (et ses développeurs).
En général, on évite de préfixer par des tirets-bas, cf la FAQ de dvpz pour la règle exacte. Diverses coquilles aussi. On verra plus tard
Un lien vers, ou un résumé rapide, du Fragile Base Class serait appréciable.
Le ThreadingModel n’est pas exception safe on dirait, et les mutexs ne sont jamais déverrouillés. Sinon, on n’a pas besoin d’un héritage avec les politiques. Ici cela n’apporte rien à part à essayer de rendre dynamisable un point de variation que l’on sait non dynamique par écriture du code. Bref, on va payer un appel virtuel pour rien. Même avec l’héritage (même si je n’en vois pas l’intérêt ici), on n’a pas besoin d’un appel à une fonction virtuelle. I.e. on peut avoir héritage pour le static_assert
(si vraiment ça nous fait plaisir – si on a été pervertis par Java j’ai envie de dire) et 0 fonction virtuelle.
En ce qui me concerne, ce n’est pas parce que l’on hérite d’une classe que l’on respecte sa sémantique (même si c’est fortement conseillé). Ainsi travailler à un niveau concept me suffit, surtout sur un polymorphisme/point-de-variation statique (je me contente donc de "coin" et de pattes palmées pour décréter que c’est un canard).
En ce qui me concerne (bis), le point de variation pour décider si je veux vérifier le contrat ou pas, je l’ai déjà avec -DNDEBUG
. Je n’ai pas besoin de l’enlever explicitement dans le code source avec AssertChecker
. Je trouve même que c’est néfaste car ça permet au développeur de débrayer de rouler sans ceinture. Parenthèse: pour le coup, tu as lorgné du côté des Mixin classes, cf. la thèse et les articles de Yagnis Smaragdakis (écrit de mémoire presque 19 ans après, des fois le cerveau enregistre des trucs pas possibles) sur les Mixin Layers. Bien des années après, A.Alenxandrescu a publié un expérience avec les Mixin Layers/CRTP sur le CUJ si mes souvenirs sont bons. A propos d’allocateurs je crois…
Dernier pinaillage, le lexique du TC++PL de Stroustrup définit "méthode" comme "fonction membre virtuelle". Il est préférable d’éviter ce terme pour désigner des fonctions membres.