Ich habe eine Komponentenklasse, die eine statische Vorlagenmethode definiert, wie ein Component
im Allgemeinen erstellt werden sollte:
Dann gibt es eine Implementierung, zum Beispiel ein Button
. Der Konstruktor dieser Klasse sollte nicht direkt verwendet werden, stattdessen gibt es eine statische Methode, die die Template-Funktion Component::createComponent
aufruft.
Die Implementierung sieht so aus und übergibt den zu instanziierenden Typ und eine Konstante, die bei der Erstellung verwendet wird:
%Vor% Nun ist das Problem, dass der Compiler sich mit "error: 'Button :: Button (uint32_t)' ist geschützt" . Zu meinem Verständnis sollte dieser Aufruf des Konstruktors OK sein, da Button
erweitert Component
ist, aber das scheint hier ein Problem zu sein.
Wie kann ich das lösen?
Da Ihre create()
-Funktion nicht in der Lage sein wird, mit weiteren geerbten Klassen umzugehen, können Sie dies nutzen und nicht erstellen eine Button
, sondern stattdessen eine generische abgeleitete, geschützte, abgeleitete Klasse, die Zugriff auf Ihren protected
-Konstruktor haben würde:
Tags und Links c++ inheritance templates protected