If I have a class with getters of return type both const and non-const, how can I use the non-const one?
The class (MeshManipulator.h):
namespace vortex::meshSculptEngine
{
class MeshManipulator
{
public:
...
topologyMesh::Mesh* getMesh();
const topologyMesh::Mesh* getMesh() const;
...
};
}
The code where I want to use the Mesh (SimpleMeshCorrector.cpp):
void SimpleMeshCorrector::smoothBoundaryLoops(float distance)
{
if (!_boundaryLoops.empty()) {
Mesh* mesh = getEngine()->getManipulator()->getMesh();
...
}
}
I get the following error:
A value of type "const vortex::topologyMesh::Mesh*" cannot be used to initialize an entity of type "vortex::topologyMesh::Mesh*"
I can use const_cast but I just don't feel that this is the correct way to solve this problem.
Root cause is (as clarified in comments) that
getManipulator()returns aconst MeshManipulator*. On aconstobject, only methods declaredconstcan be called. Thus, theconstgetter is always called and never the non-constversion.Depending on the context, there are three ways to go on:
MeshManipulator*.const Mesh*to a local, mutable object.const_cast<Mesh*>to be able to mutate the object in place. This, however, defeats the purpose of constness. What's more, if the object pointed to was declaredconstthis will result in undefined behavior. So use with care.