android ndk — C ++ Nullable / необязательное целое число для использования с векторами

Я использую NDK на Android, я надеялся получить что-то похожее на List на Java, где элементы могут иметь нулевые значения. Я знаю, что в C ++ ноль отличается от Java, поэтому я хочу, чтобы значение элемента было необязательным.

Я знаю, что Boost имеет Boost.Optional, Я не хочу добавлять эту библиотеку только для этого.
Я видел такой код return Nullable<double>(); на стеке потока
Как использовать Nullable типы в C ++ / Cli?
но я думаю, что это только для MS Visual C ++, когда я пишу похожий код, он говорит, что Nullable не может быть решена.

Я использую библиотеку STLPort.

0

Решение

Это 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
};

И так далее. Вам не понадобится деструктор. Вы даже можете выдать исключение, если они пытаются извлечь значение из нулевого объекта.

0

Другие решения

Использовать Нулевой объект или сохранить (умный) указатель в списке.

0

По вопросам рекламы [email protected]