Funções virtuais e confronto de modelos

Eu tenho uma classe base abstrata para um pointAccumulator. Essa base abstrata será preenchida com métodos como uma função que retorna a média de todos os pontos. Um exemplo dessas duas classes é mostrado abaixo:

<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 você pode ver no código eu também gostaria de usar a serialização de impulso para salvar esses tipos. Agora, usando um padrão de fábrica, acredito que você chame os tipos pointAccumulator assim:

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

Meu problema é que o método de serialização modelo não será acessível se eu chamar assim. Também não posso ter a classe de modelo na classe abstrata, pois isso não é permitido pelo c ++. Existe alguma forma de contornar isto?

Editar:

Eu considerei o método não-intrusivo para serialização, mas isso requer heights_ para ser público, o que não é ideal, nem é um bom estilo de programação. Eu pensei que um método potencialmente usando classes ou funções de amigos pudesse penetrar na classe com acesso às variáveis ​​enquanto ainda mantinha a classe base abstrata? Alguém pode explicar como isso funcionaria?

questionAnswers(5)

yourAnswerToTheQuestion