std :: function到成员函数

时间:2011-03-01 11:50:14

标签: c++ function-pointers

#include <functional>

struct A
{
    int func(int x, int y)
    {
        return x+y;
    }
};

int main()
{

    typedef std::function<int(int, int) > Funcp;
    A a;
    //Funcp func = std:::bind(&A::func, &a);
    Funcp func = std::bind(&A::func, a, std::placeholders::_1);


    return 0;
}

我在上述两个绑定函数中都遇到错误:

 error C2825: '_Fty': must be a class or namespace when followed by '::'

语法错误在哪里?我正在使用visual studio 2010

2 个答案:

答案 0 :(得分:36)

Funcp func = std::bind(&A::func, &a, std::placeholders::_1, std::placeholders::_2);

答案 1 :(得分:0)

我花了一段时间才弄清楚发生了什么。因此,在这里添加它是为了对其他人有利,在这里进行解释会有所帮助。为了更清晰起见,我将一些函数和变量重命名。

Ingress-GCE

类成员函数具有一个隐式/隐藏参数,该参数指向对象(#include <functional> struct A { int MemberFunc(int x, int y) { return x+y; } }; int main() { typedef std::function<int(int, int) > OrdinaryFunc; A a; OrdinaryFunc ofunc = std::bind(&A::MemberFunc, a, std::placeholders::_1, std::placeholders::_2); int z = ofunc(10, 20); // Invoke like an ordinary function return 0; } 指针)。这些成员函数只能通过提供一个对象来调用,这使其与普通函数有所不同。

this可用于将成员函数“转换”为普通函数。在新函数中,对象 bound 绑定到成员函数的隐式/隐藏参数,并且在调用时无需传递。未绑定的参数由占位符std::bind_1表示,并且在调用时必须传递。