簡體   English   中英

將指針轉換為成員函數將指針轉換為靜態函數

[英]Convert Pointer To Member Function To Pointer To Static Function

如何將成員函數指針轉換為靜態函數?

這是我的代碼:

class ClassA
{
public:
    int n;
    void func();
};
void ClassA::func()
{
    n = 89;
}

class ClassB
{
public:
    float f1;
    float f2;
    void func(float f);
};
void ClassB::func( float f )
{
    f1 += f;
    f2 += f;
}


int main (int argc, char *argv[]) 
{
    ClassA* a = new ClassA;
    ClassB* b = new ClassB;

    //PROBLEM IS HERE
    void (* pf_func1)(void*) = ClassA.func;
    void (* pf_func2)(void*, float) = ClassB.func;


    pf_func1(a);
    pf_func2(b, 10);
}

您可以將std::bind到相關類的實例:

auto func1 = std::bind(&ClassA::func, a);
func1();

此結合成員函數Class::funca 並且類似地:

auto func2 = std::bind(&ClassB::func, b, std::placeholders::_1);
func2(10.0f);

另外,您可以使用std::mem_fn來輕松更改被調用的對象,並提供所需的語法:

auto func1 = std::mem_fn(&ClassA::func);
func1(a);
auto func2 = std::mem_fn(&ClassB::func);
func2(b, 10.0f);

並非在兩種情況下func1func2實際上都不是函數指針,但它們的行為確實像它們。 std::bindstd::mem_fn返回的類型是實現定義的。 它們都可以轉換為std::function

void(ClassA::*pf1)() = &ClassA::func;
void(ClassB::*pf2)(float) = &ClassB::func;
void (__thiscall * pf_func1)(void*) = (void (__thiscall *)(void*)) ((void*&)pf1);
void (__thiscall * pf_func2)(void*, float) = (void (__thiscall *)(void*, float)) ((void*&)pf2);

解決了

:)

暫無
暫無

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

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