SGI STL拥有Monoid Operation概念。例如Monoid Operation已经实现了power函数。
Boost.Graph库也定义了Monoid概念。
除了已经建议的 Programming Elements,你还可以查看由Alexander Stepanov(EoP的作者之一)编写的Notes on Programming。 笔记是免费提供的,与EoP书籍有一些重叠。
EoP和Notes之间存在样式差异-EoP非常简洁,就像数学教科书一样,但是Notes则更加“非正式”-有一些小故事等。
顺便说一句,两本书都对上面提到的power函数实现进行了讨论。
P.S. Alexander Stepanov有一些很棒的演讲:
P.P.S. Alexander A. Stepanov的论文集
Boost.Operators 提供了一种方便的方式来为类定义一组算术运算符。
预定义的概念(仅语法鸭子类型)包括环、有序环、欧几里得环、有序欧几里得环、域和有序域。您应该能够通过从适当的运算符类组派生来为半环或幺半群定义自己的类。
template<class T>class MultId: field<T> {};
并定义混合的operator*
版本以反映交换律。 - TemplateRex
std::accumulate
的并行版本中,例如Cilk reducer超对象(由Leiserson等人之一) - TemplateRex