Chaining together computations that may or may not produce a value
In the previous recipe, we have seen how to use the std::optional
class for storing a value that may or may not exist. Its use cases include optional parameters to functions and return values from functions that may fail to produce a result. When multiple such functions need to be chained together, the code can become cumbersome and verbose. For this reason, the C++23 standard has added several new methods to the std::optional
class. They are referred to by the term monadic operations. These methods are transform()
, and_then()
, and or_else()
. In this recipe, we’ll see what they are useful for.
In simple terms, in functional programming, a monad is a container that encapsulates some functionality on top of a value that it wraps. Such an example is std::optional
in C++. On the other hand, a monadic operation is a function from a domain D into D itself. For instance, the identity function (a function...