У меня есть модуль, который выполняет некоторые вычисления и во время вычислений, общается с другими модулями. Поскольку модуль вычисления не хочет полагаться на другие модули, он предоставляет такой интерфейс (это, конечно, очень упрощенная версия):
class ICalculationManager
{
public:
double getValue (size_t index) = 0;
void setValue (size_t index, double value) = 0;
void notify (const char *message) = 0;
};
Приложения, которые хотят использовать модуль расчета, должны написать собственную реализацию интерфейса и подать его в инструмент расчета, например:
MyCalculationManager calcMgr;
CalculationTool calcTool (calcMgr);
calcTool.calculate();
Теперь мне интересно, имеет ли смысл добавлять "const" к методам интерфейса ICalculationManager.
Казалось бы логичным, что метод getValue получает только что-то и ничего не меняет, поэтому я могу сделать это const. И setValue, вероятно, изменяет данные так, чтобы они не были const. Но для более общего метода, такого как уведомление, я не могу быть уверен.
Фактически, ни для одного из методов я не могу теперь точно убедиться, что метод действительно реализован как метод const, и если бы я сделал методы интерфейса const, я заставляю все реализации быть const, а также возможно, не нужен.
Мне кажется, что методы const имеют смысл только в том случае, если вы заранее знаете, какова будет ваша реализация и будет ли она const или нет. Это правда?
Не имеет смысла создавать методы такого типа интерфейса const? И если это имеет смысл, то какие хорошие правила определяют, должен ли метод быть const или нет, даже если я не знаю, что будет реализовано?
РЕДАКТИРОВАТЬ: изменил параметр от уведомления от "char *" до "const char *", поскольку это приводит к нерелевантным ответам.