Виртуальные функции и столкновение шаблонов
У меня есть абстрактный базовый класс для pointAccumulator. Эта абстрактная база будет заполнена такими методами, как функция, которая возвращает среднее значение всех точек. Пример этих двух классов показан ниже:
<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>
Как вы можете видеть в коде, я также хотел бы использовать сериализацию Boost для сохранения этих типов. Теперь, используя фабричный шаблон, я считаю, что вы вызываете типы pointAccumulator следующим образом:
<code>lala *a1 = new lalaLower(); </code>
Моя проблема в том, что шаблонный метод сериализации не будет доступен, если я назову его таким образом. Также я не могу иметь шаблонный класс в абстрактном классе, так как это не разрешено c ++. Есть ли способ обойти это?
Редактировать:
Я рассмотрел неинтрузивный метод для сериализации, но он требует, чтобы heights_ был общедоступным, что не является идеальным и не является хорошим стилем программирования. Я думал, что потенциально метод, использующий дружественные классы или функции, может проникнуть в класс с доступом к переменным, сохраняя при этом базовый класс абстрактным? Кто-нибудь может объяснить, как это будет работать?