c++ 之 dynamic_pointer_cast

/*
 * dynamic_pointer_cast
 */

    描述 (Description)
        它返回一个正确类型的sp副本,其存储的指针从U *动态地转换为T *。

    声明 (Declaration)
        以下是std :: dynamic_pointer_cast的声明。
        template
          shared_ptr dynamic_pointer_cast (const shared_ptr& sp) noexcept;


    C++11
        template
          shared_ptr dynamic_pointer_cast (const shared_ptr& sp) noexcept;


    参数 (Parameters)
        sp - 它是一个共享指针。

    返回值 (Return Value)
        它返回一个正确类型的sp副本,其存储的指针从U *动态地转换为T *。

    异常 (Exceptions)
        noexcep - 它不会抛出任何异常。

/*
 * example
 */
#include
#include

struct A {
    static const char* static_type;
    const char* dynamic_type;

    A() {
        dynamic_type = static_type;
    }
};

struct B: A {
    static const char* static_type;

    B() {
        dynamic_type = static_type;
    }
};

const char* A::static_type = "sample text A";
const char* B::static_type = "sample text B";

int main ()
{
   std::shared_ptr foo;
   std::shared_ptr bar;

   bar = std::make_shared();
   foo = std::dynamic_pointer_cast
(bar);

   std::cout << "foo's static type: " << foo->static_type << '\n';
   std::cout << "foo's dynamic type: " << foo->dynamic_type << '\n';
   std::cout << "bar's static type: " << bar->static_type << '\n';
   std::cout << "bar's dynamic type: " << bar->dynamic_type << '\n';

   return 0;
}

/*
    foo's static type: sample text A
    foo's dynamic type: sample text B
    bar's static type: sample text B
    bar's dynamic type: sample text B
*/

你可能感兴趣的:(C/C++,c++)