Шаблон класса<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();
}