Como faço para remover a duplicação de código entre funções de membro const e não const similares?
Vamos dizer que eu tenho o seguinteclass X
onde eu quero retornar o acesso a um membro interno:
class Z
{
// details
};
class X
{
std::vector<Z> vecZ;
public:
Z& Z(size_t index)
{
// massive amounts of code for validating index
Z& ret = vecZ[index];
// even more code for determining that the Z instance
// at index is *exactly* the right sort of Z (a process
// which involves calculating leap years in which
// religious holidays fall on Tuesdays for
// the next thousand years or so)
return ret;
}
const Z& Z(size_t index) const
{
// identical to non-const X::Z(), except printed in
// a lighter shade of gray since
// we're running low on toner by this point
}
};
As duas funções de membroX::Z()
eX::Z() const
tem código idêntico dentro das chaves. Este é um código duplicadoe pode causar problemas de manutenção para funções longas com lógica complexa.
Existe uma maneira de evitar essa duplicação de código?