Есть константная функция, которая что-то возвращает. Но, она возвращает лениво-вычесленные данные, то есть они вычисляются при первом обращении. Это нормально сделать эти данные mutable? Или кривой архитектурный шаг?
Здравствуйте, Hоmunculus, Вы писали:
H>Есть константная функция, которая что-то возвращает. Но, она возвращает лениво-вычесленные данные, то есть они вычисляются при первом обращении. Это нормально сделать эти данные mutable? Или кривой архитектурный шаг?
А как иначе?
Логически то, что ты возвращаешь — константные данные. То, что ты их вычисляешь при первом обращении — деталь реализации. Поэтому да, mutable. Он примерно для этого и придуман.
Здравствуйте, Hоmunculus, Вы писали:
H>Есть константная функция, которая что-то возвращает. Но, она возвращает лениво-вычесленные данные, то есть они вычисляются при первом обращении. Это нормально сделать эти данные mutable? Или кривой архитектурный шаг?
Если пользователь класса не должен знать, что вычисление кэшируется, то mutable — нормально.
Если пользователь должен значь про кэширование и как-то это учитывать, например, вызывая сбросы кэша при глобальных изменениях, то лучше сделать функцию не константной.
(Пусть он сам объявит экземпляр класса mutable, при необходимости.)