将 std::function 作为参数传递给 for_each
Posted
技术标签:
【中文标题】将 std::function 作为参数传递给 for_each【英文标题】:passing std::function as a parameter to for_each 【发布时间】:2015-12-10 17:21:50 【问题描述】:#include <initializer_list>
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
std::function<void(int)> sample_function()
return
[](int x) -> void
if (x > 5)
std::cout << x;
;
int main()
std::vector<int> numbers 1, 2, 3, 4, 5, 10, 15, 20, 25, 35, 45, 50 ;
std::for_each(numbers.begin(), numbers.end(), sample_function);
我正在尝试将 sample_function() 传递给 for_each,但我遇到了这个错误
错误 C2197 'std::function': 调用参数过多
【问题讨论】:
此代码不会将std::function
传递给for_each
。它传递sample_function
,这是一个不带参数并返回std::function<void(int)>
类型的对象的函数。错误信息是正确的:sample_function
不带参数,因此不能使用范围内的元素调用。
【参考方案1】:
我认为您想要的是以下内容
#include <iostream>
#include <vector>
#include <functional>
std::function<void(int)> sample_function = [](int x)
if (x > 5) std::cout << x << ' ';
;
int main()
std::vector<int> numbers 1, 2, 3, 4, 5, 10, 15, 20, 25, 35, 45, 50 ;
std::for_each(numbers.begin(), numbers.end(), sample_function);
输出是
10 15 20 25 35 45 50
或者,如果您确实想定义一个返回 std::function
类型对象的函数,那么您可以编写
#include <iostream>
#include <vector>
#include <functional>
std::function<void(int)> sample_function()
return [](int x)
if (x > 5) std::cout << x << ' ';
;
int main()
std::vector<int> numbers 1, 2, 3, 4, 5, 10, 15, 20, 25, 35, 45, 50 ;
std::for_each(numbers.begin(), numbers.end(), sample_function() );
输出将与上图相同。注意通话
std::for_each(numbers.begin(), numbers.end(), sample_function() );
^^^^
【讨论】:
【参考方案2】:您需要括号来调用对sample_function
的函数调用,然后它将为您的for_each
返回std::function
对象:
std::function<void(int)> sample_function()
return [](int x) -> void
if (x > 5) std::cout << x;
;
int main()
std::vector<int> numbers 1, 2, 3, 4, 5, 10, 15, 20, 25, 35, 45, 50 ;
std::for_each(numbers.begin(), numbers.end(), sample_function());
^^
Live Demo
【讨论】:
以上是关于将 std::function 作为参数传递给 for_each的主要内容,如果未能解决你的问题,请参考以下文章