#cpp
Допустим, что есть такой класс обертка ( это может быть умный указатель к примеру ) : templateclass SomeTemplate { SomeTemplate(T* pData); // .. some code T* getPointer() { return pData; } private: T* pData; }; И два таких : class A { // ... some code }; class B : public A { // ... some code }; Так вот, бывает, что возникает ситуация когда есть SomeTemplate и SomeTemplate нужно бы преобразовать к SomeTemplate. Конечно самый очевидный способ : B* pTempB = (B*)pA.getPointer(); SomeTemplate pB(pTempB); Можно ли это сделать как - то проще ? Перегрузить оператор приведения типа у SomeTemplate ведь тоже никак нельзя ?
Ответы
Ответ 1
Попробуйте так: templateSomeTemplate(SomeTemplate & s) { pData = s.getPointer(); } (ну и оператор присваивания). Таким образом вы сможете написать SomeTemplated(new D()); // ... SomeTemplate b(d); В обратную сторону скомпилироваться не должно, что на самом деле правильно: ведь указатель на базовый класс не обязательно указывает на экземпляр производного класса.
Комментариев нет:
Отправить комментарий