C++如何在shared_ptrs的向量中存储多个类型?

Gam*_*per 6 c++ polymorphism templates vector shared-ptr

我怎样才能在std :: vector中存储多个shared_ptr,每个shared_ptr都有一个指向不同类型的指针?

std::vector < ? > vec;
vec.push_back( make_shared<int>(3));
vec.push_back( make_shared<float>(3.14f));
Run Code Online (Sandbox Code Playgroud)

是否有一个基本的多态类可以用于该任务而不必使用特定于编译器的东西?

bst*_*our 7

有几种方法可以做到这一点.我假设您要存储各种本机类型,因为您使用的是int和float.

  1. 如果您的类型列表是有限的,请使用boost :: variant.例如

    std::vector<std::shared_ptr<boost::variant<int, float>>>;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果你想存储任何东西,请使用boost :: any.例如

    std::vector<std::shared_ptr<boost::any>>;
    
    Run Code Online (Sandbox Code Playgroud)