基本上我想这样做: Can I use a lambda function or std::function object in place of a function pointer?
显然现在对于期望函数指针的函数是不可能的。但是,它适用于需要仿函数的函数(我之前使用stl的sort()函数完成了它)
但是,我不知道如何编写一个以仿函数为参数的函数!
任何?
答案 0 :(得分:19)
只需编写一个任意类型的函数:
template <typename Func>
void foo(Func fun)
{
fun(...);
}
这将与函数指针,仿函数和lambda一起使用。
void f() {}
struct G
{
void operator()() {}
};
foo(&f); // function pointer
foo(G()); // functor
foo([]() { ... }); // lambda
答案 1 :(得分:16)
我不知道如何编写一个以仿函数为参数的函数!
由于还没有人发布std::function
解决方案:
#include <functional>
#include <iostream>
void foo(std::function<int(int)> f)
{
for (int i = 0; i < 10; ++i)
{
std::cout << f(i) << ' ';
}
std::cout << '\n';
}
int main()
{
foo( [](int x) { return x*x; } );
}
您可以在预编译C ++ 11编译器中使用boost::function
。
答案 2 :(得分:6)
它必须是一个模板,例如:
template<class F>
void foo( const F& f )
{
f(x,y);
}