在我的代码中,我想使用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表示乘法,依此类推。是否有一些标准机制来获得这样的价值?我应该自己动手吗?
注意:
答案 0 :(得分:2)
标准库中没有这样的设施。事实上,标准库中有模板函数,它通常与幂等值一起使用:std::accumulate
;它要求用户自己提供幂等价值。
您可以提供get_idempotent
模板类,专门用于标准仿函数,并要求用户将其专门用于任何用户定义的仿函数。与iterator_traits
,allocator_traits
,numeric_limits
等一样。缺少此类专业化应该是错误的(staic_assert
?)