Я использую NDK на Android, я надеялся получить что-то похожее на List на Java, где элементы могут иметь нулевые значения. Я знаю, что в C ++ ноль отличается от Java, поэтому я хочу, чтобы значение элемента было необязательным.
Я знаю, что Boost имеет Boost.Optional, Я не хочу добавлять эту библиотеку только для этого.
Я видел такой код return Nullable<double>();
на стеке потока
Как использовать Nullable типы в C ++ / Cli?
но я думаю, что это только для MS Visual C ++, когда я пишу похожий код, он говорит, что Nullable не может быть решена.
Я использую библиотеку STLPort.
Это 32-битный int
мы говорим о Какова природа ваших переменных — вы уверены, что все 4294967296 возможных значений одинаково возможны и допустимы? В подавляющем большинстве случаев вы можете назначить конкретное значение типа int — ноль, или -1, или миллиард — как «ненулевое значение» и относиться к нему так же, как к нулевому. Тщательно продумайте свой список, посмотрите, сможете ли вы выбрать значение, которое не может появиться в списке, и, если оно есть, трактуйте его как ноль.
Единственный вариант использования, который я могу придумать, где все возможные значения int одинаково действительны, — это 32-битные хэши или контрольные суммы (например, CRC32).
Если все остальное не сработает, то довольно просто раскрутить собственную реализацию обнуляемого примитива. Основы пошли бы так:
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
};
И так далее. Вам не понадобится деструктор. Вы даже можете выдать исключение, если они пытаются извлечь значение из нулевого объекта.
Использовать Нулевой объект или сохранить (умный) указатель в списке.