Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This is an older version of Boost and was released in 2024. The current version is 1.89.0.
The monadic interface of optional
allows the application of functions to optional values without resorting
to the usage of explicit if-statements.
Function map takes a function
mapping type T onto type
U and maps an optional<T> onto
an optional<U> using
the provided function.
int length(const string& s){ return s.size(); }; optional<string> null{}, thin{""}, word{"word"}; assert (null.map(length) == none); assert (thin.map(length) == 0); assert (word.map(length) == 4);
Function flat_map is similar,
but it requires the function to return an optional<V>
for some type V. This optional<V> becomes
the return type of flat_map.
optional<char> first_char(const string& s) { if (s.empty()) return none; else return s[0]; }; optional<string> null{}, thin{""}, word{"word"}; assert (null.flat_map(first_char) == none); assert (thin.flat_map(first_char) == none); assert (word.flat_map(first_char) == 'w');
These functions can be combined in one expression reflecting a chain of computations:
auto get_contents(path p) -> optional<string>; auto trim(string) -> string; auto length(string) -> int; auto trimmed_size_of(optional<path> p) -> int { return p.flat_map(get_contents) .map(trim) .map(length) .value_or(0); }