[英]std::function to member function
#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
Funcp func = std::bind(&A::func, &a, std::placeholders::_1, std::placeholders::_2);
我花了一段時間才弄清楚發生了什么。 因此,為了其他人的利益,將其添加到此處,解釋會有所幫助。 為了更清晰,我重命名了一些函數和變量。
#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
指針)的隱式/隱藏參數。 這些成員函數只能通過提供一個對象來調用,這使得它不同於普通函數。
std::bind
可用於通過傳遞對象(指針或引用)將成員函數“轉換”為普通函數。 它是在列表中的第一個參數args
( &a
或a
在這種情況下)以下的成員函數。 在新函數中,對象綁定到成員函數的隱式/隱藏參數,調用時不需要傳遞。 未綁定的參數由占位符_1
、 _2
表示,並且必須在調用時傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.