如何确保我只在c ++中提供时才使用特定的类功能?

时间:2017-04-21 02:57:07

标签: c++ c++11 software-design

假设我有一个类使用另一个类作为功能。

class city{

    void travel(){
        // if rail road travel by rail

        // if no rail road travel by foot 
    }

private:
   RailRoad rails;
};

当我实例化城市

时 案例1:我可以拥有铁路的城市。

案例2:我也可以没有铁路的城市。

我认为是使用RailRoad * rails并使用nullptr作为标志来确定案例。我试图避免这种情况,因为为此我必须做新的并删除。

有没有优雅的方法来实现这个目标?

2 个答案:

答案 0 :(得分:2)

boost::optional<RailRoad>(或std::optional<RailRoad>,因为C ++ 17)将为您提供相同的语义,而无需动态分配。

答案 1 :(得分:2)

如果默认构造的RailRoad不是太贵,您可以使用:

std::pair<bool, RailRoad> optionalRailroad;

作为成员变量,理解为

optionalRailroad.first == false

表示创建的对象没有RailRoad

optionalRailroad.first == true

表示该对象是使用RailRoad

创建的