Funkcje wirtualne i konflikt szablonów

Mam abstrakcyjną klasę bazową dla akumulatora pointAccumulator. Ta abstrakcyjna baza zostanie wypełniona metodami, takimi jak funkcja, która zwraca średnią ze wszystkich punktów. Przykład tych dwóch klas pokazano poniżej:

<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>

Jak widać w kodzie, chciałbym również użyć zwiększenia serializacji, aby zapisać te typy. Teraz, używając wzorca fabrycznego, uważam, że wywołujesz typy pointAccumulator w ten sposób:

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

Moim problemem jest to, że metoda serializacji za pomocą szablonów nie będzie dostępna, jeśli nazywam to w ten sposób. Również nie mogę mieć klasy szablonowej w klasie abstrakcyjnej, ponieważ nie jest to dozwolone przez c ++. Czy istnieje sposób na obejście tego problemu?

Edytować:

Rozważyłem nieinwazyjną metodę serializacji, ale wymaga ona, aby wysokość była publiczna, co nie jest idealne, ani nie jest dobrym stylem programowania. Myślałem, że potencjalnie metoda wykorzystująca klasy lub funkcje znajomych może przeniknąć klasę z dostępem do zmiennych, zachowując jednocześnie abstrakcję klasy bazowej? czy ktoś może wyjaśnić, jak to działa?

questionAnswers(5)

yourAnswerToTheQuestion