Re[3]: Уменьшение объема шаблонов
От: Vi2 Удмуртия http://www.adem.ru
Дата: 01.10.02 12:37
Оценка:
Здравствуйте SDM, Вы писали:

Vi2>>Посмотри как реализуется IDispatchImpl<T> от базового интерфейса T : IDispatch. Он реализует методы базового интерфейса IDispatch. Здесь аналогия: IDispatch — это твой IBase, а T — IMyInterface.


Vi2>>Точно так же и ты можешь сделать IBaseImpl<T> с реализацией методов IBase и использовать IBaseImpl<IBase> и IBaseImpl<IMyInterface> и т.п. там, где нужно.


SDM>Но остается риторический вопрос: Получается что через наследование нельзя?


Ну почему нельзя? Можно, но муторно и не сопровождаемо.

У тебя все структуры IBase и все IMyInterface-ы определены в h-файле от MIDLа, и соотношение между ними установлены. Вклиниться туда нет возможности без потери сопровождения. Можно ввести свои классы и иерархию на них — тогда не будет связи с MIDL-овской иерархией.

Так что пусть будут шаблоны, это меньшее зло.

SDM>И еще, а как оно развернется компилятором: создаст мне N реализаций одного и того же IBaseImpl или всетаки сделает одну?


Для каждого интерфейса IMyInterface (т.е. для каждого параметра шаблона) будет свой класс IBaseImpl<IMyInterface> с реализацией функций IBase. Если функции большие и постоянные можно сделать то, что делает ATL при подобной ситуации.

Пример оттуда: IPersistStreamInitImpl<T> функция Load, IPersistStreamInit_Load и AtlIPersistStreamInit_Load с минимальными издержками.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.