Re[4]: Чем заменить виртуальные функции?
От: zelenprog  
Дата: 24.08.23 06:12
Оценка: 6 (1)
S>>>Если это скриптовый язык с динамической типизацией, который позволяет в массив складывать объекты разных типов

Z>>Да, в массив можно сложить объекты любых типов.


S>Этот язык позволяет пройтись по такому массиву и вызвать для каждого элемента одноимённые методы?


Да, это возможно.
По массиву можно прийтись и вызвать одинаковый метод для разных объектов, даже если это объекты разного типа (разных классов).

S>Есть такая идиома pimpl

S>Вы можете сделать внешний класс (обёртка), который хранит в своём свойстве экземпляр другого класса (реализация).
S>Делаете разные классы реализаций, которые друг с другом не связаны. Но чтобы они все имели схожие наборы методов.
S>Из метода обёртки можно будет вызывать методы реализаций.
S>По сути это обычная инкапсуляция. Зато не требует наследования.

Спасибо, идею понял. Попробую.

S>Но если у вас уже чётко прописана иерархия классов, на которую вы повлиять не можете — то думаю это вам не поможет)


Иерархия классов — это моя разработка. Я сам создавал все классы, начиная от базового.
В базовом(-ых) классе(-ах) задан некий универсальный алгоритм, который вызывает абстрактные (виртуальные) функции.
Эти "абстрактные" функции должны быть реализованы реальными виртуальными функциями в классах-наследниках. На C#, например, никакой проблемы с этим не было.
А вот на моем "новом" скриптовом языке я столкнулся с тем, что это невозможно сделать.

S>Кстати если из метода класса реализации нужен метод внешней обёртки, то можно попробовать передать обёртку (this) в метод реализации в качестве параметра.


Ага.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.