2

我正在尝试找到可以执行以下操作的模板函数:

template <typename T>
T add(T lhs, T rhs) {
    return lhs + rhs;
}

(用于加法、减法、乘法和除法)。

我记得有一套标准的功能——你还记得它们是什么吗?

4

2 回答 2

10

在标题<functional>中,您会找到类似std::plusstd::minusstd::multiplies和的内容std::divides

它们也不是函数。它们实际上是函子

于 2012-06-27T21:33:55.053 回答
6

您需要标头中的仿函数,例如std::plus<functional>。请参阅此处的算术运算

这些是函子,而不是函数,所以你需要一个实例来做任何有用的事情:

#include <functional>
#include <iostream>
int main() {

  std::multiplies<int> m;
  std::cout << m(5,3) << "\n";

}

在上面的示例中,这似乎有点矫枉过正,但它们对于标准库算法非常有用。例如,求向量中元素的乘积:

std::vector<int> v{1,2,3,4,5,6};
int prod = std::accumulate(v.begin(), v.end(), 1, std::multiplies<int>());
于 2012-06-27T21:34:58.920 回答