与向量一起使用的C++可为Null/可选项的整数
C++ Nullable/optionable integer to be used with vectors
我在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对象模式或存储(智能(指针。
相关文章:
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 除了系统("pause")之外,是否有其他选项可以保持可执行文件打开?
- 为什么null std ::可选的被认为小于任何值,而不是更多
- 什么是提升等价于标准::可选空选项
- 为什么指针可以为NULL
- 而 (p=strtok(NULL, "," )) 警告:p可识别的错误分配
- 可测试的无效浮点值.(浮点值为NULL)
- 从已编译的可执行文件中获取编译器选项
- boost::program_options是否可以实现这种可重复选项
- strlen()的可选项是什么
- 当第 4 个(可选)参数为 NULL 时,写入文件将引发访问冲突
- 可关闭的QTabWidget选项卡,但不是全部
- 如何通过COM公开可为null的类型
- 创建一个实现选项卡并可用作 QMainWindow 中的"central widget"的类
- 内存可用时,Realloc()返回NULL
- Qt有自己的boost::可选选项吗
- 我可以用Boost::program_options将可猜测和不可猜测的选项解析在一起吗
- 我可以从constexpr函数返回一个可选项吗
- 在C++17中,可以使用带有初始值设定项的if语句来解压缩可选项
- 与向量一起使用的C++可为Null/可选项的整数