如何确保仅在 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
创建的
假设我有 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