pointAccumulatorの抽象基本クラスがあります。この抽象ベースには、すべてのポイントの平均を返す関数などのメソッドが入力されます。これら2つのクラスの例を以下に示します。
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_;
};
コードでわかるように、これらのタイプを保存するためにブーストシリアル化も使用したいと思います。ファクトリパターンを使用して、pointAccumulatorタイプを次のように呼び出すと思います。
lala *a1 = new lalaLower();
私の問題は、このように呼び出すと、テンプレート化されたシリアル化メソッドにアクセスできないことです。また、c ++では許可されていないため、抽象クラスにテンプレートクラスを含めることはできません。これを回避する方法はありますか?
編集:
私はシリアル化のための非侵入的な方法を検討しましたが、それはheights_を公開する必要があり、これは理想的ではなく、優れたプログラミングスタイルでもありません。フレンドクラスまたは関数を使用するメソッドは、基本クラスを抽象化したまま、変数にアクセスしてクラスに侵入できる可能性があると思いましたか?誰かがこれがどのように機能するか説明できますか?