簡體   English   中英

std::function 到成員函數

[英]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&aa在這種情況下)以下的成員函數。 在新函數中,對象綁定到成員函數的隱式/隱藏參數,調用時不需要傳遞。 未綁定的參數由占位符_1_2表示,並且必須在調用時傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM