2016-04-07 2 views
2

class Bもし導出することができます私はdynamic_castshared_ptr<B>shared_ptr<A>に基底クラスにsmartpointers、およびshared_ptr<A>からshared_ptr<B>か?鋳造<code>class A</code>から

dynamic castを使用すると、Javaでinstanceofのようなことができます。これがsmart_ptrでも動作するかどうか、私は自分自身に尋ねました。

+0

関連:http://stackoverflow.com/questions/19932629/implicit-conversion- of-shared-ptr –

答えて

4

派生クラスから基本クラスにキャストする特別なケースでは、必要な暗黙的変換を行う代入演算子が用意されています。他の方向については、dynamic_pointer_castを使用できます。

#include <memory> 

struct A { virtual ~A() = 0; }; 
struct B: A { }; 

void example() 
{ 
    // derived to base 
    std::shared_ptr<B> b; 
    std::shared_ptr<A> a = b; 

    // base to derived 
    std::shared_ptr<A> a2; 
    std::shared_ptr<B> b2 = std::dynamic_pointer_cast<B>(a2); 
} 

操作をキャスト詳細はhttp://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_castを参照してください - reinterpret_pointer_castなどのすべての通常の容疑者のための同等物があるなど