今天再来看看 C++23 Monadic std::optional,在 Overview of C++23 Features 只是简单介绍了用法,这里来说说设计原理。 std::optional 是一个 Monad,这个概念源于 FP (Functional Programming),对于 C++ coder 而言,理解起来并非易事。若是你熟悉 Haskell,这个就相当于里面的 Maybe。Monads 叫作单子,是范畴论里面的概念,若要完全弄懂的话需要扩展许多概念,不符合 TGS 的定位,因此这里只是小做介绍。 简单来说,Monads 是 FP 当中的一个抽象数据类型,抽象的目的在于表示计算过程。通过这种方式,能够减少重复代码,简化组合流程。 用下面的公式来解释一下: m a \rarr (a \to m b) \rarr m b (a \rarr m b) 表示操作,a 是输入类型,b 是输出类型。操作必须满足某种上下文,才能知道怎样处理,m 就指定了这个上下文。如果将其替换为一个针对 std::optional 的函数,会更加容易理解: std::optional<int> f(std::optional<std::string>… Continue Reading T230807 Reviewing C++23 Monadic std::optional