Как внедрить прокси-сервер с ленивым загрузкой для интерфейса метки с помощью метода const getText ()?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как внедрить прокси-сервер с ленивым загрузкой для интерфейса метки с помощью метода const getText ()?

Сообщение Anonymous »

У меня проблемы с правильной реализацией прокси -шаблона. В моем проекте у меня есть абстрактный класс метки (используемый в качестве интерфейса) и его конкретные дети, такие как SimpleLabel и Richlabel. Поскольку на каждой метке должен быть какой -то текст, я добавил значение переменной элемента в базовый класс. Вот мой интерфейс метки: < /p>
class Label {
protected:
std::string value;
public:
Label(const std::string&);
virtual std::string getText() const = 0;
virtual ~Label() = default;
};
< /code>
Мне нужно реализовать новый тип метки - давайте назовем ее Proxylabel - с помощью шаблона проектирования прокси. Идея заключается в следующем: < /p>
Ленивая инициализация: текст для метки следует читать с стандартного ввода только при вызове его метода getText (). После того, как текст будет считан, его следует хранить (кэшировать) и автоматически возвращать при последующих вызовах. < /P>
Опция тайм -аута. Опция изменить текст метки или продолжать использовать текущий.std::string ProxyLabel::getText() const {
if (!initialised) {
std::cout = timeout) {
std::cout
Стандартная практика предполагает, что моя новая просилабель класса должна наследовать от метки, но также составлять этикетку (т.е. удерживать экземпляр внутренней метки). < /p>
Вопрос: как мне примирить это? Если Proxylabel является ребенком метки, то в своем конструкторе она должна вызвать один из конструкторов метки. Но метка имеет только конструктор, который принимает строку std :: std (то есть значение). Разве этот конструктор не называет целью ленивой инициализации, особенно если этот конструктор выполняет тяжелые операции? Другими словами, как я могу создать проксилавелью, которая задерживает ввод, не заставляя создавать (и потенциальную тяжелую инициализацию) метки? Это означает, что не разрешено изменять объект. Тем не менее, прокси должен обновить свое внутреннее состояние (кэширование ввода, обновление счетчика и, возможно, изменение кэшированного текста после тайм -аута). < /P>
Вопрос: в этой ситуации приемлем Используйте изменяемые переменные члена в проксилабеле? Я не решаюсь изменить интерфейс только для одного класса.

Подробнее здесь: https://stackoverflow.com/questions/794 ... onst-gette
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»