как расширить функционал класса
От: sergey2b ЮАР  
Дата: 20.07.20 14:48
Оценка:
есть класс, графическое окно с пару десятком методов для вывода графики

оно работает только под виндой а мне надо добавить саппорт linux (код уже есть)
вомногих приложениях и классах есть поинтер на этот класс

как можно добавить новый функционал, что бы не менять исходный код прилжений и классов использующих класс окна сейчас

пока вижу варианты

детский #ifdef (но яуже понял что реализовать просто не удастся)

изменить существующий класс, фабрика возрашает поинтер на нужный класс и методы используют его

Паттерн «Декоратор»
Re: как расширить функционал класса
От: Stanislav V. Zudin Россия  
Дата: 20.07.20 14:55
Оценка: 4 (1) +1
Здравствуйте, sergey2b, Вы писали:

S>есть класс, графическое окно с пару десятком методов для вывода графики


S>оно работает только под виндой а мне надо добавить саппорт linux (код уже есть)

S>вомногих приложениях и классах есть поинтер на этот класс
S>как можно добавить новый функционал, что бы не менять исходный код прилжений и классов использующих класс окна сейчас

S>пока вижу варианты


S>детский #ifdef (но яуже понял что реализовать просто не удастся)

Для небольших классов годится.

S>изменить существующий класс, фабрика возрашает поинтер на нужный класс и методы используют его


Можно и так.

Еще есть pimpl.
Системозависимая функциональность выносится в отдельный класс и отдельный файл.


Upd. Подумай еще. Может удастся обойтись просто парой реализаций твоего класса — одна для винды, другая — для линюха.
Интерфейс должен быть идентичным.
В зависимости от ОС цепляется либо одна реализация, либо другая — это уже управляется на уровне makefile (подставить своё).
_____________________
С уважением,
Stanislav V. Zudin
Отредактировано 20.07.2020 15:00 Stanislav V. Zudin . Предыдущая версия .
Re[2]: как расширить функционал класса
От: sergey2b ЮАР  
Дата: 20.07.20 16:27
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:


SVZ>Еще есть pimpl.

SVZ>Системозависимая функциональность выносится в отдельный класс и отдельный файл.


а чем pimpl от декоратора отличаетья
кроме того что в одном случаи поинтер используеться, а в другом объект
Re[3]: как расширить функционал класса
От: Мёртвый Даун Россия  
Дата: 20.07.20 16:37
Оценка: 4 (1) +3
Здравствуйте, sergey2b, Вы писали:

S>Здравствуйте, Stanislav V. Zudin, Вы писали:



SVZ>>Еще есть pimpl.

SVZ>>Системозависимая функциональность выносится в отдельный класс и отдельный файл.


S>а чем pimpl от декоратора отличаетья

S>кроме того что в одном случаи поинтер используеться, а в другом объект

В этом и отличается. Ну и плюс там нет наследования как такого.
Вот например как в Qt сплошь и рядом. https://habr.com/ru/post/76248/

Но вот как написали выше, самое нормальное и простое:

mywindow.h — тут интерфейс
mywindow_win.cpp — реализация win
mywindow_linux.cpp — реализация Linux
mywindow_mac.cpp — реализация Mac

При сборке разруливаешь.
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.