如何确保仅在 C++ 中提供时才使用特定的 class 功能?

How to make sure I use specific class feature only when provided in c++?

假设我有 class 使用另一个 class 作为特征。

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 作为标志来确定大小写。我试图避免这种情况,因为为此我必须进行新建和删除。

有什么优雅的方法可以做到这一点吗?

boost::optional<RailRoad>(或自 C++17 起的 std::optional<RailRoad>)将在没有动态分配的情况下为您提供相同的语义。

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

std::pair<bool, RailRoad> optionalRailroad;

作为成员变量,理解为

optionalRailroad.first == false

表示创建对象时没有 RailRoad

optionalRailroad.first == true

表示对象是用 RailRoad

创建的