У меня возникают некоторые проблемы с автоматическим приведением типов shared_ptr
унаследованных классов.
Моя структура класса следующая: базовый класс Base
и два производных класса Derived1
и 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() {...}
...
...
};
У меня есть функция doSomething()
void doSomething(std::shared_ptr<Base> ptr) {
ptr->run();
...
}
Я вызываю функцию с производными классами так:
doSomething(make_shared<Derived1>())
doSomething(make_shared<Derived2>())
Но я получаю сообщение об ошибке -
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>'
Что я делаю неправильно? Можно ли просто использовать static_pointer_cast
для типа Base? Как -
doSomething(static_pointer_cast<Base>(make_sahred<Derived2>()))
РЕШЕНИЕ Мой плохой... Проблема в том, что я наследовал базовый класс в частном порядке.