函数可以作为参数传递给其他函数或算法。在这种情况下,如果函数的两个参数具有相同的类型,则只指定第一个模板参数就足够了。
这使代码更短,更易读。
这是一个人为的例子。:)
#include <iostream>
#include <numeric>
#include <iterator>
#include <functional>
int main()
{
int a[] = { 1, 2, 3 };
int b[] = { 4, 5, 6 };
std::cout << "a: ";
for ( int x : a ) std::cout << x << ' ';
std::cout << std::endl;
std::cout << "b: ";
for ( int x : b ) std::cout << x << ' ';
std::cout << std::endl;
auto sum = std::inner_product( std::begin( a ), std::end( a ),
std::make_move_iterator( std::begin( b ) ), 0,
std::plus<int>(), std::exchange<int> );
std::cout << "sum = " << sum << std::endl;
std::cout << "a: ";
for ( int x : a ) std::cout << x << ' ';
std::cout << std::endl;
}
输出是
a: 1 2 3
b: 4 5 6
sum = 6
a: 4 5 6
或者示例可以包含转换
#include <iostream>
#include <numeric>
#include <iterator>
#include <functional>
int main()
{
int a[] = { 1, 2, 3 };
double b[] = { 4.4, 5.5, 6.6 };
std::cout << "a: ";
for ( int x : a ) std::cout << x << ' ';
std::cout << std::endl;
std::cout << "b: ";
for ( double x : b ) std::cout << x << ' ';
std::cout << std::endl;
auto sum = std::inner_product( std::begin( a ), std::end( a ),
std::make_move_iterator( std::begin( b ) ), 0,
std::plus<>(), std::exchange<int> );
std::cout << "sum = " << sum << std::endl;
std::cout << "a: ";
for ( int x : a ) std::cout << x << ' ';
std::cout << std::endl;
}