Angenommen, ich die folgenden Klassendefinitionenerbt Bedingtes von den reinen Basisklasse
struct base {
virtual int f() = 0;
};
struct A: public base {
int f() final { return 1; }
};
struct B: public base {
int f() final { return 2; }
};
haben Ist es möglich, A
und B
in Vorlagen zu drehen, die einen bool
Parameter nehmen, ob aus dem base
oder nicht zu erben gibt? Ich habe Anwendungsfälle, die eine Basisklasse benötigen oder nicht, die eine gemeinsame Schnittstelle bereitstellt.
Angenommen, A
und B
haben viele Elementfunktionen, so dass die Duplizierung der Implementierung mühsam wäre. Aber sizeof(A)
und sizeof(B)
sind klein.
Benötigen Sie zwei Versionen? Unter der Annahme, dass "base" nur abstrakte Funktionen enthält, sollten keine Laufzeitkosten entstehen. In Ihrem Beispiel sollte Ihr Optimierer sehen, dass jedes 'A' von dort' f() 'verwendet, da es' final' ist. – Guvante
@Guvante: Er macht den Typ polymorph, was ihm eine vtable gibt. Keine Laufzeitkosten, aber trotzdem Kosten. – ildjarn
@Guvante Die Größe des Erbtyps ist um die Größe eines Zeigers größer, der auf die Vtable zeigt. – SU3