Вызов константной функции из неконстантного объекта - PullRequest
21 голосов
/ 02 января 2009

Мне нужно вызвать константную функцию из неконстантного объекта. Смотрите пример

struct IProcess {
   virtual bool doSomeWork() const = 0L;
};
class Foo : public IProcess {    
  virtual bool doSomeWork() const {
    ...
  }
};

class Bar
{
public:
   const IProcess& getProcess() const {return ...;}
   IProcess& getProcess() {return ...;}

   void doOtherWork {
    getProcess().doSomeWork();        
  }
};

Звонок

getProcess().doSomeWork();

всегда приведет к вызову

IProcess& getProcess()

Есть ли другой способ позвонить

const IProcess& getProcess() const 

из непостоянной функции-члена? Я до сих пор использовал

const_cast<const Bar*>(this)->getProcess().doSomeWork();

, который делает трюк, но кажется слишком сложным.


Редактировать: я должен упомянуть, что код подвергается рефакторингу, и в итоге останется только одна функция.

const IProcess& getProcess() const 

Однако, в настоящее время есть побочный эффект, и вызов const может возвращать другой экземпляр IProcess в течение некоторого времени.

Пожалуйста, продолжайте тему.

Ответы [ 11 ]

0 голосов
/ 02 января 2009

Ну, вы можете объявить

void doOtherWork const ()

Это сделало бы это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...