Название: Шаблоны, наследование и методы Отправлено: System от Март 30, 2015, 10:19 Имеется следующий код:
Код Результат выполнения: Код Необходимо изменить этот код так, чтобы вместо Tmpl::_f вызывалась Instance::_f. Первое решение - объявить _f виртуальной. Однако, это решение использовать в данном случае нельзя. Как ещё можно добиться требуемого результата? Название: Re: Шаблоны, наследование и методы Отправлено: System от Март 30, 2015, 11:33 Нашёл один вариант:
Код Может, есть другие решения? Какое-то оно... Через одно место, как мне кажется... Название: Re: Шаблоны, наследование и методы Отправлено: _Bers от Март 30, 2015, 14:42 http://rextester.com/QGDYN30725
Код: #include <cstdio> Название: Re: Шаблоны, наследование и методы Отправлено: Igors от Март 31, 2015, 09:01 С интересом наблюдал за темой, тоже нашел это решение, но подумал что private обходить нельзя, поэтому не годится. Скажите, а есть еще какие-то пути или только этот единственный?
Спасибо Название: Re: Шаблоны, наследование и методы Отправлено: System от Март 31, 2015, 09:51 К сожалению, private обходить действительно нельзя. Функция _f() должна быть скрытой от кода, использующего класс. Максимум - объявить protected. ;) Решение со static_cast и friend мне не очень нравится, но, похоже, придётся реализовывать именно его в связи с отсутствием других предложений.
Название: Re: Шаблоны, наследование и методы Отправлено: System от Март 31, 2015, 10:12 Можно чуть упростить код, написав
Код вместо Код
|