Например, мы пишем адаптер, позволяющий приводить строки типа const char* и std::string к единому интерфейсу вида Data, Size. Для const char* размер можно расчитать через strlen() сразу (не важно, потребуется нам результат вычислений или нет), но можно сделать это только если понадобится:
class StringAdapterБез mutable мы бы не смогли внутри Size(), объявленной как const, модифицировать наш кэш.
{
public:
explicit StringAdapter(const std::string& String) :
_Data(String.data()), _Size(String.size()), _SizeCached(true) {}
explicit StringAdapter(const char* String) :
_Data(String), _SizeCached(false) {}
const char* Data() const { return _Data; }
size_t Size() const
{
if (!_SizeCached) { _Size = strlen(_Data); _SizeCached = true; }
return _Size;
}
private:
const char* _Data;
mutable size_t _Size;
mutable bool _SizeCached;
};
Комментариев нет:
Отправить комментарий