#cpp
Допустим, что есть такой класс обертка ( это может быть умный указатель к примеру ) :
template
class 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); В обратную сторону скомпилироваться не должно, что на самом деле правильно: ведь указатель на базовый класс не обязательно указывает на экземпляр производного класса.
Комментариев нет:
Отправить комментарий