Ho problemi con il typecasting automatico tra shared_ptr
di classi ereditate.std :: shared_ptr ed Eredità
mia struttura di classe è come segue, una classe base Base
e due classi derivate Derived1
e Derived2
.
// Base class
class Base {
protected:
...
...
public:
Base() = default;
virtual ~Base() = default;
virtual void run() = 0;
...
...
};
// Derived class
class Derived1: Base {
protected:
...
...
public:
Derived1() = default;
virtual ~Derived1() = default;
void run() {...}
...
...
};
// Derived class
class Derived2: Base {
protected:
...
...
public:
Derived2() = default;
virtual ~Derived2() = default;
void run() {...}
...
...
};
Ho una funzione doSomething()
void doSomething(std::shared_ptr<Base> ptr) {
ptr->run();
...
}
io chiamo la funzione con le classi derivate in questo modo -
doSomething(make_shared<Derived1>())
doSomething(make_shared<Derived2>())
Ma ottengo un errore che dice -
no viable conversion from 'shared_ptr<class Derived1>' to 'shared_ptr<class Base>'
no viable conversion from 'shared_ptr<class Derived1>' to 'shared_ptr<class Base>'
Cosa sto sbagliando? È sicuro usare solo static_pointer_cast
per il tipo Base? Come -
doSomething(static_pointer_cast<Base>(make_sahred<Derived2>()))
SOLUZIONE Il mio male ... Il problema era che stavo ereditare la classe base privata.
quale compilatore usa? Ottengo l'errore sull'ultimo Apple Clang ... – subzero
Scusa il mio male ... Ho ereditato la classe privatamente nel mio codice! E 'stato un vero errore da principiante! – subzero
Does shared_ptr automaticamente (senza alcun cast di tipi) viene convertito in una classe base shared_ptr? Condividono lo stesso conteggio dei riferimenti? – abhiarora