如何编写一个以仿函数为参数的函数

时间:2011-10-16 21:36:43

标签: c++ visual-studio-2010

基本上我想这样做: Can I use a lambda function or std::function object in place of a function pointer?

显然现在对于期望函数指针的函数是不可能的。但是,它适用于需要仿函数的函数(我之前使用stl的sort()函数完成了它)

但是,我不知道如何编写一个以仿函数为参数的函数!

任何?

3 个答案:

答案 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);
}