这个C ++类成员基数和声明之间的映射是否正常?

时间:2016-04-21 09:06:16

标签: c++ composition

我的设计中有类(结构)成员的三种基数。

  • 0或1
  • 0或更多
  • 恰好一个

我已将它们映射到以下声明为类(结构)成员

class Foo {
        ExactlyOnce exactlyOnce;
        std::unique_ptr<ZeroOrOnce> zeroOrOnce;
        std::list<std::shared_ptr<ZeroOrMore>> zeroOrMore;
};

我打算在整个软件包中概括这个模式,这种方法是否正确或者它有一些错误w.r.t.会员基数?

2 个答案:

答案 0 :(得分:2)

对于zeroOrMore基数,按值存储元素,而不是按指针存储元素。存储指针只作为最后的手段,如果没有别的办法。

答案 1 :(得分:1)

看起来很好。

考虑以下因素:

  • boost::optional用于ZeroOrOne(如果您已经使用了提升);由于API针对此进行了优化,因此其背后的意图更为明确。

  • 使用std::vector<T>代替std::list<std::shared_ptr<T>> ZeroOrMore。在你拥有大型/昂贵的物体并进行正面和随机插入的情况之外,矢量往往更有效。