Talvez você seja como eu, viciado em usar const, mais muitas vezes nos deparamos com métodos que precisamos alterar
algum atributo dentro de um método declarado como const
class Image
{
public:
void Draw() const;
private:
std::size_t m_BlitErrorCount;
}
Vejamos esse exemplo do metodo Draw da classe Image
precisamos implementar um contador de erros do SDL_BlitSurface (sinceramente não vejo utilidade isso)
void Image::Draw() const
{
if (SDL_BlitSurface(mSurface, NULL, Screen, rect) < 0)
{
m_BlitErrorCount++;
// O compilador acusa erro na linha acima
// pois não podemos modificar qualquer
// atributo dentro desse método declarado como const
}
}
Como solucionar?
Adicione a palavra reservada mutable na declaração de m_BlitErrorCount, ficando assim:
class Image
{
public:
void Draw() const;
private:
mutable std::size_t m_BlitErrorCount;
}
Veja também
Um outro caso para o uso da mutable é na implementação do design Organizando a janela em classes, de nosso amigo Vinícius, onde temos à seguinte declaração do método draw
virtual void draw() const = 0;
Usando a palavra reservada mutable na declaração do atributo usado internamente em draw você “burla” o const
Agora seu código compila sem erros
