У меня есть класс 'MyClass', который содержит некоторые данные, хранящиеся в std::map
s. Стандартные карты содержат указатели на объекты, например
private:
std::map<int,Object*> m_data;
Я хочу предоставить данные внешнему миру, но я не хочу, чтобы другие классы / функции могли изменять либо (i) карту m_data
, либо (ii) объекты, на которые указывают значения в m_data
. Мне нужна некоторая гипотетическая функция, скажем, getDataBegin()
, которая возвращает итератор для данных, свойства которых указаны выше. Например, я хочу, чтобы следующие псевдокод примеров потерпели неудачу:
iterator_type itr = myclass.getDataBegin();
erase(itr); // not allowed because we cannot modify m_data;
itr.second = NULL; // not allowed to change content of m_data (falls under first rule)
itr.second->methodWithSideEffect(); // not allowed because changes content of object pointed to.
Короче говоря, вы можете сказать, что я имею доступ только для чтения к некоторым данным участника. Это вообще возможно хорошим способом, и если так, то как я мог пойти об этом?