Попытка сохранить указатель на абстрактный класс в карте C++
У меня есть программа, которая хранит указатель на абстрактный класс на карте, так что я могу использовать данные с карты для выполнения вызовов конкретных классов абстрактного класса (используя фабричный метод).
Он должен хранить указатель, так как класс абстрактный, но проблема в том, что когда я делаю указатель, я получаю ошибку
Нет подходящей функции-члена для вызова 'insert'
Мой код выглядит следующим образом:
Заголовок класса фабрики форм
#ifndef ShapeFactoryManager_hpp
#define ShapeFactoryManager_hpp
#include <stdio.h>
#include "ShapeFactory.h"
#include "CircleFactory.h"
#include "PolygonFactory.h"
#include "LineFactory.h"
#include <map>
class ShapeFactoryManager
{
public:
ShapeFactoryManager();
const static ShapeFactoryManager& getInstance();
ShapeFactory createFactory(unsigned long shapeID) const;
bool RegisterShape(unsigned long id, ShapeFactory* factory) const;
private:
const std::map<unsigned long, ShapeFactory*>registrationTable;
};
#endif /* ShapeFactoryManager_hpp */
Руководитель фабрики форм.cpp
bool ShapeFactoryManager::RegisterShape(unsigned long id, ShapeFactory* factory) const
{
registrationTable.insert(std::make_pair(id, factory));
return true;
}
Ошибка возникает при:
registrationTable.insert(std::make_pair(id, factory));
1 ответ
std::map::insert
не является константной функцией-членом. Вполне логично, что, если карта постоянна, мы не можем добавить или удалить ее.
Удалить const квалификатор registrationTable
а также из RegisterShape
, Если функция-член должна изменить состояние, она также не должна быть константной.