Virtuelle Funktionen und Template-Konflikte

Ich habe eine abstrakte Basisklasse für einen pointAccumulator. Diese abstrakte Basis wird mit Methoden wie einer Funktion ausgefüllt, die den Mittelwert aller Punkte zurückgibt. Ein Beispiel für diese beiden Klassen ist unten dargestellt:

<code>class lala {
public:
    virtual someFunctions = 0;

    virtual bool isEmpty() = 0;
};


class lalaLower : public lala {
public:
    lalaLower(){}
    ~lalaLower(){}


    someFunctions

    template<class Archive> void serialize(Archive & ar, const unsigned int version) {
        ar & heights_;
    }

protected:
    std::deque<double> heights_;
};
</code>

Wie Sie im Code sehen können, möchte ich auch die Boost-Serialisierung verwenden, um diese Typen zu speichern. Ich gehe davon aus, dass Sie die pointAccumulator-Typen mit einem Factory-Muster wie folgt bezeichnen:

<code>lala *a1 = new lalaLower();
</code>

Mein Problem ist, dass auf die Serialisierungsmethode mit Vorlagen nicht zugegriffen werden kann, wenn ich sie so nenne. Außerdem kann ich die Klasse mit Vorlagen nicht in der abstrakten Klasse haben, da dies in c ++ nicht zulässig ist. Gibt es eine Möglichkeit, dies zu umgehen?

Bearbeiten:

Ich habe die nicht aufdringliche Methode zur Serialisierung in Betracht gezogen, aber dazu muss heights_ öffentlich sein, was weder ideal noch ein guter Programmierstil ist. Ich dachte, möglicherweise könnte eine Methode, die Friend-Klassen oder -Funktionen verwendet, die Klasse mit Zugriff auf die Variablen durchdringen, während die Basisklasse weiterhin abstrakt bleibt. Kann mir jemand erklären, wie das funktionieren würde?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage