Ich benutze C++ 11. Ich habe eine Base
Klasse und mehrere abgeleitete Klassen für die Analyse verschiedener Konfigurationsdateien Zeile für Zeile.CRTP und Methode zurückgeben void *
template <class T>
class Base
{
public:
virtual ~Base();
bool load_from_file(const QString& str);
virtual void* get_data(const QString& str) const = 0;
private:
QList<QSharedPointer<T> > items_;
};
Jeder Nachkomme (class Derived: public Base<My_struct>
) muss get_data()
Umsetzung.
Jede My_struct
Instanz enthält Informationen aus einer bestimmten Zeile einer Einstellungsdatei.
Stellen Sie sich beispielsweise eine typische Datei mit einer Liste von Proxies vor.
My_struct
Instanzen sind in Smart-Pointer in Base
Klasse in der load_from_file()
Methode verpackt und an die items_
Mitglied angehängt. load_from_file()
Methode wirft void*
zu T*
vor dem Einwickeln.
Ist es möglich, diese Klassen neu zu gestalten, um die Verwendung von void*
(und ohne Bibliotheken wie boost::any
) zu vermeiden?
Ich meine CRTP und so weiter. Normalerweise enthalten CRTP-Beispiele Methoden abgeleiteter Klassen mit void
Rückgabewerten (wie in Pascal).
Welchen Typ möchten Sie eigentlich 'get_data' zurückgeben? 'My_struct'? –
CRTP ist 'Klasse abgeleitet: öffentliche Basis', nicht einige andere Struktur. Dann können Sie die Funktion 'T *' zurückgeben lassen. –
@MarkRansom, ich möchte My_struct * in einer der abgeleiteten Klassen zurückgeben – ilya