У меня проблемы с правильной реализацией прокси -шаблона. В моем проекте у меня есть абстрактный класс метки (используемый в качестве интерфейса) и его конкретные дети, такие как 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
Как внедрить прокси-сервер с ленивым загрузкой для интерфейса метки с помощью метода const getText ()? ⇐ C++
Программы на C++. Форум разработчиков
1739014149
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>
Вопрос: в этой ситуации приемлем Используйте изменяемые переменные члена в проксилабеле? Я не решаюсь изменить интерфейс только для одного класса.
Подробнее здесь: [url]https://stackoverflow.com/questions/79422878/how-do-i-implement-a-lazy-loading-proxy-for-a-label-interface-with-a-const-gette[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия