Erst etwas, das funktionieren sollte, dann etwas, das nicht funktioniert. Warum funktioniert es nicht, ist die Frage.
Ich melde zwei Klassen an:
class Base { ... };
class Derived : public Base { ... };
Ich habe dann an anderer Stelle die folgende Funktion:
void foo(shared_ptr<Base> base);
Der folgende Code sollte funktionieren, oder?
share_ptr<Derived> derived;
foo(derived);
Vergessen Sie das oben Gesagte, ich deklariere drei Klassen:
class Foo { ... };
template <typename TYPE> class Base { ... };
class Derived : public Base<Foo> { ... };
An anderer Stelle deklariere ich eine Schablonenfunktion:
template <typename TYPE> void foo(shared_ptr<Base<TYPE> > base);
Der folgende Code funktioniert nicht:
shared_ptr<Derived> derived;
foo(derived);
Es wird gesagt, dass keine passende Funktion foo(...) gefunden wurde, die Folgendes akzeptiert share_ptr<Derived>
Erstens: Sollte das ursprüngliche Beispiel funktionieren? Und zweitens, was denken Sie, könnte das Problem im zweiten Beispiel sein, wo ich eine shared_ptr
zu einer Klasse, die von einer spezialisierten Basisklasse abgeleitet ist.