This is my attempt:
class A {
public:
void testA(){
std::cout << "A" << std::endl;
}
};
class B : public A{
public:
void testB(){
std::cout << "B" << std::endl;
}
};
template <typename T>
std::shared_ptr<T> getBase(std::shared_ptr<A> a){
return std::dynamic_pointer_cast<T>(a);
}
int main()
{
auto b = std::make_shared<B>();
std::shared_ptr<A> a = b;
a->testA();
auto c = getBase<B>(a);
c->testB();
return 0;
}
Unfortunately it doesn't compile. Am I doing sth wrong?