获得std :: multiply和std :: plus的中性元素

NoS*_*tAl 3 c++ stl template-meta-programming

在实现构造函数采用的模板类时:

  1. 函数向量(函数类型std::function<bool(const T&)>)
  2. std::binary_function<bool,bool,bool> 我将用于累积从1)到某个值的矢量应用的结果.

我希望能够使用std::plus()std::multiplies()作为第二个模板参数,但问题是,根据函数我需要一个相应的中性元素(对于std累积初始值).对于AND(std::multiplies)我需要true(又名1),因为OR(std::plus)我需要false(又名0).我知道我可以专门化模板并解决问题,但我想知道是否有办法为内置STL函数获取中性元素.

Iva*_*iev 6

如果你正在使用gcc,你可以使用__gnu_cxx :: identity_element,这正是你所要求的.

如果你不是,我不认为有一个通用的解决方案,好像有,gcc不会实现自己的 - 你可能只是重写他们的实现(实际上只是几个模板专业化,如你所料).

编辑:此源代码位于此文件的第78-98行.