Ben*_*ane 0 c++ stl c++-standard-library
我想知道如何确定我的元组是否为空?请注意,我将std :: tuble与std :: map结合使用,如下所示:
typedef std::tuple<SDESType,INT32,std::string> SDesItem;
typedef std::map<SDESType,SDesItem> SDesItemMap;
Run Code Online (Sandbox Code Playgroud)
现在我想检查第二个值SDesItemMap,即元组是否为空?
if(SDesItems[SDESType] != NULL) // this is error
Run Code Online (Sandbox Code Playgroud)
std::tuple像三个价值联系在一起的行为.它没有预定义的"空"或"零"状态,除了每个成员的空状态.空值始终是上下文,通常表示位于常规类型值的域之外的值.
例如,自然数只能是0(或1,取决于您的定义)向上.因此,使用a 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"
>
Run Code Online (Sandbox Code Playgroud)
optional<>还不是其中的一部分std::,所以你必须编写自己的实现或使用Boost.另一种方法是使用value_ptr(再次提升),但在这里它不会给你带来任何好处.