我想知道如何识别我的元组是否为空?
请注意,我将 std::tuble 与 std::map 结合使用,如下所示:
typedef std::tuple<SDESType,INT32,std::string> SDesItem;
typedef std::map<SDESType,SDesItem> SDesItemMap;
现在我想检查 SDesItemMap
的第二个值,即一个元组,是否为空?
if(SDesItems[SDESType] != NULL) // this is error
std::tuple
就像三个值绑在一起一样。除了每个成员的空状态外,它没有预定义的“空”或“零”状态。空值始终与上下文相关,通常表示位于常规类型值域之外的值。
例如,一个自然数只能是0(或1,取决于你的定义)向上。因此,使用 int
为您提供了一种方便的方式来表示域外的值,并且应该不规则地对待。
要在您的示例中清楚地表示,请使用 optional<tuple<...>>
作为映射值(如果您想明确声明“给定键处有一个空值”)。此类型声明您通过实例化 optional
获得的类型的可能值模板现在是原始类型的所有值,和一个特殊的无(/empty/none)值。
你也可以声明元组的部分可以是空的(什么都没有),比如
tuple <
std::string, // empty string ("") can be treated as "empty state"
optional<int>, // if you don't want to treat 0 (or -1) as "empty"
>
optional<>
不是 std::
的一部分但是,因此您必须编写自己的实现或使用 the Boost one .另一种方法是使用 value_ptr
(再次提升),但在这里它可能不会给您带来任何好处。