Here is my problem. I made a class with a member function declared as const
that uses an external function that I cannot modify (declared in someone else's code) and that is not declared const
. More precisely
class B {
public:
void foo();
};
class A : public B {
public:
void bar() const {
this->foo();
}
};
I know that for member data we can force const-correctness by using mutable
or const_cast
. How can I 'hack' foo
such that my compiler understands that I would like to use it as if it was const even if it is not declared in someone else's code ?
Dont do that.
Don't do it like this:
Example:
class A : public B {
public:
void bar() const {
const_cast<B*>(static_cast<const B*>(this))->foo();
}
};
Edit: The valid use-case for this is if:
B::foo()
doesn't modify state, and could have been declared const
, but...B::foo()
forgot to declare it const, and...In theory this cannot happen but in practice it sometimes does.
The better answer, as the other answerers have correctly said, is to have B::foo()
fixed, or to provide an alternate function which does the same thing is declared const.