存储特定范围类的任何值和值

时间:2017-10-10 08:07:45

标签: c++ vector polymorphism

我有一个看起来像这样的课程:

class container{
private:
     std::vector<physical_component> physical;
     std::vector<storage_component> storage;
     --some other stuff not relevant--
public:
    --constructors, getters setters, methods to add to the vectors etc--
}

现在我正在制作physical_component和storage_component类,因为我不知道正确的数据类型来处理这类事情。

Physical_component应该能够:

  1. 存储一定数量的类型,并完全保留一种类型(我可以施展的东西就足够了)
  2. 应该以一种方式存储对象,使其与传递的对象保持一致(因此可以保护对orignial类的更改)
  3. 我记得那句话就像在enum旁边那样令人兴奋,但我不知道这个名字。此外,c ++可能有更好的方法。

    Storage_component应该是:

    1. 存储任何类型
    2. (可选)记住原始类型
    3. 我不知道如何正确实现这一目标。我看到std :: any但它似乎相当新,因此我不知道它是否是一个很好的方法来解决这个问题。另外,我无法使storage_component成为模板,因为我无法将其存储在矢量

      实现这些类的(正确)方法是什么?

1 个答案:

答案 0 :(得分:0)

  

存储一定数量的类型,并完全保留类型

您可能需要std::variant<Ts...> (或boost::variant<Ts...>。它会在特定时间点存储 Ts...中的一个。

  

存储任何类型

如果所有类型共享相同的接口,请使用传统的virtual + std::unique_ptr多态方法。否则std::any是正确的选择。