我試圖找到做模板函數:加乘減和劃分模板功能
template <typename T>
T add(T lhs, T rhs) {
return lhs + rhs;
}
(對於加,減,乘,除)。
我記得這裏有一套標準的功能 - 你還記得它們是什麼嗎?
我試圖找到做模板函數:加乘減和劃分模板功能
template <typename T>
T add(T lhs, T rhs) {
return lhs + rhs;
}
(對於加,減,乘,除)。
我記得這裏有一套標準的功能 - 你還記得它們是什麼嗎?
在頭<functional>
,你會發現之類的東西std::plus
,std::minus
,std::multiplies
和std::divides
。
它們也不是功能。他們實際上是functors。
您需要函數,如<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>());
他們還沒有正確更新爲C++ 11 .... :( –
@BenVoigt,我從來沒有注意到:/ – chris
例如, 'plus'的函數調用操作符是'T operator()(const T&x,const T&y)const;'但是應該是'auto operator()(const T&x,const T&y)const - > declspec(x + y);'不知道委員會是如何滑倒的,也許後向兼容性被認爲更重要。 –