我在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
基本类型是否安全?喜欢 -
doSomething(static_pointer_cast<Base>(make_sahred<Derived2>()))
解决方案我的错...问题是我私下继承了基类。
据我所知,您提供的代码可以很好地编译:http : //ideone.com/06RB2W
#include <memory>
class Base {
public:
Base() = default;
virtual ~Base() = default;
virtual void run() = 0;
};
class Derived1: public Base {
public:
Derived1() = default;
virtual ~Derived1() = default;
void run() {}
};
class Derived2: public Base {
public:
Derived2() = default;
virtual ~Derived2() = default;
void run() {}
};
void doSomething(std::shared_ptr<Base> ptr) {
ptr->run();
}
int main() {
doSomething(std::make_shared<Derived1>());
doSomething(std::make_shared<Derived2>());
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句