2011-01-21 10 views
6

Aumenta i puntatori intelligenti can be used with polymorphism, ma come si lancia la sottoclasse al puntatore?Come utilizzare boost :: smart_ptr nel polimorfismo?

using namespace boost; 
// ... 
shared_ptr<SuperClass> a_ptr(new SubClass); 
// ... 
shared_ptr<SubClass> b_ptr = (shared_ptr<SubClass>)a_ptr; // Doesn't compile 

L'ultima riga non compila e dà error C2440: 'type cast' : cannot convert from 'boost::shared_ptr<T> 'a 'boost :: shared_ptr <T>'

risposta

12

È necessario utilizzare static_pointer_cast:

struct B { virtual ~B() { } }; 
struct D : B { }; 

shared_ptr<B> bp(new D); 
shared_ptr<D> dp(static_pointer_cast<D>(b)); 

(Ci sono anche dynamic_pointer_cast e const_pointer_cast per l'esecuzione rispettivamente di valori dinamici e const.)

+0

Penso che dovrebbe essere 'dynamic_p ointer_cast' in questo caso, giusto? – Philipp

+0

Se è sconosciuto in fase di compilazione se il tipo è quello specificato in <>. Else boost :: static_pointer_cast dovrebbe essere usato. –

Problemi correlati