Шаблон класса<optional
>является оберткой для представления «необязательных» (или «отменяемых») объектов, которые не могут (пока) содержать действительное значение. Факультативные объекты предлагают семантику полной стоимости; они хороши для передачи ценности и использования внутри контейнеров STL. Это библиотека только для заголовков.
Предположим, что мы хотим прочитать параметр в виде файла конфигурации, который представляет собой некоторое интегральное значение, назовем его<"MaxValue"
>. Возможно, этот параметр не указан; такая ситуация не является ошибкой. Действительно не указывать параметр и в этом случае программа должна вести себя несколько иначе. Кроме того, предположим, что любое возможное значение типа<int
>является действительным значением для<"MaxValue"
>, поэтому мы не можем просто использовать<-1
>для представления отсутствия параметра в файле конфигурации.
Вот как это делается<boost::optional
>:
#include <boost/optional.hpp>
boost::optional<int> getConfigParam(std::string name);
int main()
{
if (boost::optional<int> oi = getConfigParam("MaxValue"))
runWithMax(*oi);
else
runWithNoMax();
}