Одним из вариантов может быть оболочка с плавающей точкой и логическим значением, но она не может работать, поскольку в моих библиотеках есть контейнеры, в которых хранятся двойники, а не объекты, которые ведут себя как двойники.
Это позор. В C ++ легко создать шаблонный класс, который автоматически преобразуется в фактический двойной (ссылочный) атрибут. (Или ссылка на любой другой тип по этому вопросу.) Вы просто используете оператор приведения в шаблонном классе. Например: оператор TYPE & () {возвращаемое значение; } Затем вы можете использовать HasValue везде, где обычно используете double.
Другой будет использовать NaN (std :: numeric_limits). Но я не вижу способа проверить, является ли переменная NaN.
Как отметили litb и Джеймс Шек , C99 предоставляет нам isnan ().
Но будьте осторожны с этим! Значения Nan делают математику и логику по-настоящему интересными! Можно подумать, что число не может быть одновременно NOT> = foo и NOT <= foo. Но с NaN это может. </p>
Есть причина, по которой я держу макрос WARN-IF-NAN (X) в своем наборе инструментов. В прошлом у меня возникали интересные проблемы.