Funciones virtuales y plantilla de choque.

Tengo una clase base abstracta para un pointAccumulator. Esta base abstracta se completará con métodos como una función que devuelve la media de todos los puntos. Un ejemplo de estas dos clases se muestra a continuación:

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

Como puede ver en el código, también me gustaría usar la serialización de refuerzo para guardar estos tipos. Ahora, utilizando un patrón de fábrica, creo que llama a los tipos pointAccumulator de esta manera:

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

Mi problema es que el método de serialización con plantilla no será accesible si lo llamo de esta manera. Además, no puedo tener la clase de plantilla en la clase abstracta, ya que esto no está permitido por c ++. ¿Hay una manera de evitar esto?

Editar:

He considerado el método no intrusivo para la serialización, pero eso requiere que alturas sean públicas, lo que no es ideal ni es un buen estilo de programación. ¿Pensé que un método que usara clases o funciones de amigos podría penetrar en la clase con acceso a las variables mientras mantenía el resumen de la clase base? ¿Alguien puede explicar cómo funcionaría esto?

Respuestas a la pregunta(5)

Su respuesta a la pregunta