【发布时间】:2014-08-27 12:07:54
【问题描述】:
在继承类的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>()))
解决方案 我的错...问题是我私下继承了基类。
【问题讨论】:
标签: c++ inheritance c++11 boost shared-ptr