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:
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_;
};
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:
lala *a1 = new lalaLower();
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?