Имеет ли смысл использовать const в интерфейсе или нет?

У меня есть модуль, который выполняет некоторые вычисления и во время вычислений взаимодействует с другими модулями. Поскольку модуль вычислений не хочет полагаться на другие модули, он предоставляет такой интерфейс (конечно, это очень упрощенная версия):

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. И setValue, вероятно, изменяет данные так, чтобы они не были const. т изменить что-либо, поэтому я могу сделать это const. И setValue, вероятно, изменяет данные так, чтобы они не были const. Но для более общего метода, такого как notify, я не могу быть уверен.

Фактически, ни для одного из методов я сейчас не могу точно сказать, что метод действительно реализован как метод const, и если бы я сделал методы интерфейса const, я также заставляю все реализации быть константными, что, возможно, и нежелательно.

Мне кажется, что константные методы имеют смысл только в том случае, если вы заранее знаете, какой будет ваша реализация и будет ли она константой или нет. Это правда?

Разве нет смысла делать методы такого типа интерфейса константными? И если это имеет смысл, каковы хорошие правила, чтобы определить, должен ли метод быть константным или нет, даже если я не знаю, какой будет реализация?

РЕДАКТИРОВАТЬ: изменил параметр с notify from "char * "на" const char * ", так как это приведет к нерелевантным ответам.

12
задан Luuklag 16 November 2018 в 13:35
поделиться