У меня есть такой класс C ++:
class Example {
public:
int getSomeProperty(int id) const;
private:
lazilyLoadSomeData();
}
В основном getSomeProperty()
возвращает некоторые данные, которые были загружены с использованием lazilyLoadSomeData()
.Поскольку я не хочу загружать эти данные до тех пор, пока они не понадобятся, я вызываю этот метод в getSomeProperty()
int Example::getSomeProperty(int id) const {
lazilyLoadSomeData(); // Now the data is loaded
return loadedData[id];
}
. Это не работает, поскольку lazilyLoadSomeData () не является constДаже если он изменяет только изменяемые члены данных, компилятор не допустит этого.Вот только два решения, о которых я могу подумать:
Загрузка данных в конструктор класса, однако я не хочу этого делать, поскольку ленивая загрузка всего делает приложение быстрее.
Make lazilyLoadSomeData()
const.Это сработало бы, поскольку изменяло только изменяемые члены, но оно не казалось правильным, поскольку, исходя из названия, метод явно загружает что-то и вносит определенные изменения.
Любойпредложение о том, что было бы правильным способом справиться с этим, без необходимости обманывать компилятор (или вообще отказаться от const-правильности)?