Re[2]: Не генерируется оператор присваивания в шаблоне класс
От: MicroCephalis Россия  
Дата: 20.07.05 22:56
Оценка:
Павел Кузнецов,

ПК>Этого не происходит, т.к. унаследованные операции присваивания, определенные в CDispinterfaceWrapper<>, скрываются операциями присваивания, неявно объявленными в классе CVideoEditWrapper.

С одной стороны да. Торможу. Никак не привыкну, что шаблон — это не просто кусок, который бездумно подставляется в наследуемый класс, а полноценный предок.

А с другой — почему тогда при explicit'е он оператор присваивания по умолчанию сам не генерит, но и из предка брать не желает? Да и разве генерятся операторы? Мне казалось, что только конструкторы могут по умолчанию создаваться...

ПК>В твоем коде есть и еще несколько неудачных моментов, среди которых использование операции присваивания *this = ... в конструкторе класса.

Хм. Ну, наверное... В общем, по результатам раздумья, надо сделать в базовом классе функции для выполнения копирования от разных источников, а в наследниках вызывать эти функции по мере необходимости, в копирующих ли конструкторах, в операторах ли.

ПК>Если придерживаться твоего дизайна, нужно "вручную" создать CVideoEditWrapper::operator =(CVideoEditWrapper const&)

Ага, пришлось. И со вторым тоже.

ПК>и делегирировать вызов базовому классу.

да не, к чему он там.

ПК>Не очень понятно, зачем, вообще, определяется класс CVideoEditWrapper вместо:

ПК>typedef CDispinterfaceWrapper<_DVideoEdit> CVideoEditWrapper;

Я тут упрощенно написал. В обоих классах есть еще функции, в базовом — общие для наследников, а в наследниках — те, которые в базовом приходится вызывать через приведение к наследнику.

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