如何以模板化的方式获得二元函数的幂等值?

时间:2016-02-25 09:56:46

标签: c++ templates accumulator idempotent

在我的代码中,我想使用std :: plus,std :: multiplies和friends - 一般地进行一些累积,即传递仿函数然后将其应用于结果的元素序列。现在,而不仅仅是特殊套管前两个元素(即

MyFunctor op;
my_acc = op(arr[0] + arr[1])
for(int i = 2; i < length; i++) my_acc = op(my_acc, arr[i]);

我想用幂等值初始化my_acc

MyFunctor op;
my_acc = get_idempotent<decltype(arr[0]),MyFunctor>();
for(int i = 0; i < length; i++) my_acc = op(my_acc, arr[i]);

e.g。 0表示添加整数,1表示乘法,依此类推。是否有一些标准机制来获得这样的价值?我应该自己动手吗?

注意:

  • 我知道并非所有的仿函数都必须有幂等元,甚至不是所有的对称函数;让那些情况出错。

1 个答案:

答案 0 :(得分:2)

标准库中没有这样的设施。事实上,标准库中有模板函数,它通常与幂等值一起使用:std::accumulate;它要求用户自己提供幂等价值。

您可以提供get_idempotent模板类,专门用于标准仿函数,并要求用户将其专门用于任何用户定义的仿函数。与iterator_traitsallocator_traitsnumeric_limits等一样。缺少此类专业化应该是错误的(staic_assert?)