Jak usunąć duplikację kodu między podobnymi stałymi i stałymi funkcjami składowymi?
Powiedzmy, że mam następująceclass X
gdzie chcę zwrócić dostęp do członka wewnętrznego:
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
}
};
Dwie funkcje członkaX::Z()
iX::Z() const
mają identyczny kod w nawiasach klamrowych. To jest duplikat kodui może powodować problemy z konserwacją długich funkcji ze złożoną logiką.
Czy istnieje sposób na uniknięcie powielania kodu?