【发布时间】:2012-10-17 09:01:01
【问题描述】:
在实现模板类时,其构造函数采用:
- 函数向量(函数类型为
std::function<bool(const T&)>) -
std::binary_function<bool,bool,bool>用于将向量应用的结果从 1) 累积到某个值。
我希望能够使用std::plus() 和std::multiplies() 作为第二个模板参数,但问题是根据函数我需要一个相应的中性元素(用于std 累积初始值)。对于AND(std::multiplies)我需要true(又名1),对于OR(std::plus)我需要false(又名0)。我知道我可以专门化模板并解决问题,但我想知道是否有办法为内置的 STL 函数获取中性元素。
【问题讨论】:
-
FWIW 在数学中,“中性元素”被称为“身份元素”,或者只是“身份”。因此,
0是“加法身份”,1是字段模 2 中的“乘法身份”。 -
你想要某种通用的中性元素,独立于 AND 或 OR,本地专业化?你能提供一个使用例子吗?
-
@SteveJessop 在我的国家很抱歉(在谈到群论时),我们称之为字面意思是英语中的中性元素。很抱歉造成混乱。
-
@Acorbe 就像例子说我想“乘积”或“加积”,其中乘或加是模板参数,所以我需要从加到 0 和从乘到 1 的映射.
-
在 Stepanov 的一本书中,我想我看到了在函数调用
template<class Operator, class T> void function(Operator op, T x, T y, T op_identity){...}中将标识元素作为额外参数传递的代码。有时这可能是一种解决方法(因为调用者可能知道什么是 Operator 类型)。
标签: c++ stl template-meta-programming