2012-06-27 81 views
2

我試圖找到做模板函數:加乘減和劃分模板功能

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

(對於加,減,乘,除)。

我記得這裏有一套標準的功能 - 你還記得它們是什麼嗎?

回答

10

在頭<functional>,你會發現之類的東西std::plusstd::minusstd::multipliesstd::divides

它們也不是功能。他們實際上是functors

+2

他們還沒有正確更新爲C++ 11 .... :( –

+0

@BenVoigt,我從來沒有注意到:/ – chris

+5

例如, 'plus'的函數調用操作符是'T operator()(const T&x,const T&y)const;'但是應該是'auto operator()(const T&x,const T&y)const - > declspec(x + y);'不知道委員會是如何滑倒的,也許後向兼容性被認爲更重要。 –

6

您需要函數,如<functional>標題中的std::plus。請參閱算術運算here

這些仿函數,而不是功能,所以你需要一個實例做任何有用的東西:

#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>());