与向量一起使用的C++可为Null/可选项的整数

C++ Nullable/optionable integer to be used with vectors

本文关键字:Null 可选项 整数 可为 C++ 一起 向量      更新时间:2023-10-16

我在Android上使用NDK,我希望得到类似于Java上的List的东西,其中元素可以是null值。我知道在C++中,null与Java不同,所以我想知道元素的值是可选的。

我知道Boost有Boost。可选,我不想仅仅为此添加这个库。我在stackoverflow上看到过这样的代码return Nullable<double>();如何在c++/cli中使用Nullable类型?但我认为这只适用于MS Visual C++,当我编写类似的代码时,它说Nullable无法解决。

我正在使用STLPort库。

这是我们正在讨论的32位int。变量的性质是什么?你确定所有4294967296个可能的值都是同样可能和有效的吗?在绝大多数情况下,您可以将一个特定的int值(零、-1或十亿(指定为"非值",并像对待null一样对待它。仔细想想你的列表,看看你是否可以选择一个不可能出现在列表中的值,如果有,就把它当作null。

我能想到的唯一一个所有可能的int值都同样有效的用例是32位散列或校验和(比如CRC32(。

在其他所有失败的情况下,旋转自己的可为null的基元实现是相当容易的。基本情况如下:

template<typename T>
class Nullable<T>
{
    T _Value;
    bool _IsNull;
public:
    Nullable<T>();
    Nullable<T>(T);
    Nullable<T>(Nullable<T> &);
    Nullable<T> &operator=(Nullable<T> &);
    Nullable<T> &operator=(T);
    operator T(); //Value extractor
    bool IsNull(); //Nullity extractor
};

等等。你不需要析构函数。如果他们试图从null对象中提取值,您甚至可以抛出异常。

在列表中使用Null对象模式或存储(智能(指针。