首页 > 解决方案 > 函数可以是 const 也可以不是,取决于参数

问题描述

我试图通过促进重复代码来重构一些代码。让我们想象一下我最终得到了一个像这样的类:

class A {
public:
void method1() 
{
  do_work(true);
}

void method2() const
{
  do_work(false);
}


private:
void do_work(bool flag) {
...
if(flag)
this->data = 0;
}
}

但是这不会编译,因为 do_work 不是 const,即使使用 flag = false 调用此方法是 const。有没有办法在不再次拆分实现的情况下“解决”这个问题?

标签: c++refactoring

解决方案


do_work重构得很差,作为一个“有时是 const”的函数。

分离出const和非常量逻辑。

class A {

  void method1() 
  {
    do_work();
    this->data = 0;
  }

  void method2() const
  {
    do_work();
  }

private:

  void do_work() const {
    ...
  }
}

推荐阅读