Обертки над const и не const объктом
От: enji  
Дата: 13.12.11 11:10
Оценка:
Есть объект, он может быть как константным, так и нет. Нужно сделать обертку (через которую будет работать клиентский код) для обоих вариантов.

Пока получилось вот так:
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
— дублирование конструкторов
— две сущности вместо одной

Нельзя ли как-нибудь проще сделать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.