我需要从非常量对象调用 const 函数。查看示例
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 的不同实例。
请继续话题。
原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议
避免演员表:将其分配给
const Bar *
或其他任何东西并使用它来调用getProcess()
。这样做有一些迂腐的理由,但它也让你在不强制编译器做一些可能不安全的事情的情况下更清楚你在做什么。当然,您可能永远不会遇到这些情况,但您不妨编写一些在这种情况下不使用强制转换的东西。