Template-Spezialisierung + Vererbung
-
Hallo,
ich versuch grad Template-Spezialisierungen zu schreiben, die den Default-Fall direkt vererbt.
enum class tag_type{ none, one, two }; template<tag_type> struct fxx {}; template<> struct fxx<one> : public fxx<none> {}; template<> struct fxx<two> : public fxx<none> {};
Was haltet ihr davon? Gibt es einen Namen für dieses Idiom? Designmäßiger Reinfall? Hiermit bewirke ich, dass meine Spezialisierungen alle von der ersten Klassendefinition erben. Das bringt mir schlussendlich etwas mehr Flexibilität späterhin, wenn ich weiter auf den Klassen baue.
-
Hast du YAGNI in Betracht gezogen?
-
Jo.
Ich bau meine curl-Klassen aus und will ne Möglichkeit haben, den Request-Typ (get, post, head, ...) per Compile-Zeit zu bestimmen. Das ganze kann ich dann mit using-typedefs zu einem Implementierungsdetail machen, sodass man das im Endandwendercode nicht mehr sieht.
Ohne das Konstrukt müsste ich für jeden neuen Request-Typen die abstrakten Funktionalitäten einer HTTP-Request neuimplementieren und die sind immer gleich.
Deswegen dachte ich mir mixe ich Template-Klassen-Spezialisierung mit Vererbung der Default-Klasse.
-
Warum nicht einfach von einer Basisklasse erben, statt einer Spezialisierung?
-
5cript schrieb:
Warum nicht einfach von einer Basisklasse erben, statt einer Spezialisierung?
Steht doch oben. Ich will den Request-Typen auch noch zur Kompilierzeit bestimmen können.
Das ginge dann auch so, aber dann müsste ich schon mit Template-Templates rumhantieren und die hab ich irgendwie noch nie gemocht, auch wenn sie so exotisch aussehen :)
Wenn man dann nen Template-Parameter dafür hat, wo man durch Enums den Request-Typen spezifizieren kann, wird das Ganze schon um so einiges einfacher.