Есть объект, он может быть как константным, так и нет. Нужно сделать обертку (через которую будет работать клиентский код) для обоих вариантов.
Пока получилось вот так:
class TDBAddressConst
{
const byte *buf_;
public:
TDBAddressConst(const byte* buf);
bool operator==(TDBAddressConst b) const;
bool operator!=(TDBAddressConst b) const { return !(*this == b); }
const byte* buf() const { return buf_; }
uint_fast8_t copyTo(void *trg) const;
// другие методы, не меняющие исходный объект
};
class TDBAddress : public TDBAddressConst
{
public:
TDBAddress(byte* buf) : TDBAddressConst(buf) {}
byte* buf() const { return const_cast<byte*>(TDBAddressConst::buf()); }
const TDBAddress& clear() const;
// другие методы, модифицирующие исходный объект
};
Не нравится:
— const_cast
— дублирование конструкторов
— две сущности вместо одной
Нельзя ли как-нибудь проще сделать?