C++ std::函数到成员函数

C++ std::函数到成员函数,c++,function-pointers,C++,Function Pointers,语法错误在哪里?我正在使用visual studio 2010Funcp func=std::bind(&A::func,&A,std::占位符::_1,std::占位符::_2); 我花了一段时间才弄清楚发生了什么。因此,在这里添加它是为了其他人的利益,如果有一个解释会有所帮助。为了更加清晰,我重命名了一些函数和变量 error C2825: '_Fty': must be a class or namespace when followed by '::' #包括 结构A { int M

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

Funcp func=std::bind(&A::func,&A,std::占位符::_1,std::占位符::_2);

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

 error C2825: '_Fty': must be a class or namespace when followed by '::'
#包括
结构A
{
int MemberFunc(int x,int y)
{
返回x+y;
}
};
int main()
{
typedef std::function OrdinaryFunc;
A A;
OrdinaryFunc=std::bind(&A::MemberFunc,A,std::占位符::_1,std::占位符::_2);
int z=ofunc(10,20);//像普通函数一样调用
返回0;
}
类成员函数有一个隐式/隐藏参数,该参数指向对象(
this
指针)。这些成员函数只能通过提供对象来调用,这使其不同于普通函数


std::bind
可用于将成员函数“转换”为普通函数。在新函数中,对象绑定到成员函数的隐式/隐藏参数,在调用时不需要传递。未绑定的参数由占位符
\u 1
\u 2
表示,在调用时必须传递。

无论是作为对象还是作为要绑定的指针传递,它都允许。当指向局部变量的指针在被调用时将处于悬空状态时,这当然很重要。@hidayat占位符是一个神奇的对象,允许您将参数绑定到占位符中_1表示函数的第一个参数,_2表示函数的第二个参数。确定,并且这些参数仅在绑定成员变量时才是必需的?如果要从
std::function
的调用站点“传递”参数,则必须使用这些参数。它们允许您重新排列、复制和省略调用站点中的参数。在这种情况下,它们是分别填充到
x
y
中的参数的占位符。您需要一个_2和_1,但这似乎不是您得到的错误。是否包含占位符的正确标题?它在_2变量之后起作用我希望编译器能给出正确的错误。这是一个明显的错误,但编译器所说的并不明显。
 error C2825: '_Fty': must be a class or namespace when followed by '::'
#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;
}