Виртуальные функции и столкновение шаблонов

У меня есть абстрактный базовый класс для 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_ был общедоступным, что не является идеальным и не является хорошим стилем программирования. Я думал, что потенциально метод, использующий дружественные классы или функции, может проникнуть в класс с доступом к переменным, сохраняя при этом базовый класс абстрактным? Кто-нибудь может объяснить, как это будет работать?

Ответы на вопрос(5)

Ваш ответ на вопрос