簡體   English   中英

如何使用指向成員函數的指針來調用函數

[英]How to call a function using pointer-to-member-function

我有一堂課:

class A {
    void test_func_0(int);
    void run();

    typedef void(A::*test_func_t)(int);

    struct test_case_t{
       test_func_t test_func;
    } test_case[100];
};

現在我想在run()中調用test_func():

void A::run() 
{
    test_case[0].test_func = &test_func_0;
    test_case[0].*(test_func)(1);
}

無論我嘗試哪種組合,我代碼的最后一行都不起作用(編譯錯誤)。

用這個:

void A::run() 
{   
    test_case[0].test_func = &A::test_func_0;
    (this->*(test_case[0].test_func))(1);
}

請注意,您有2個錯誤。 第一個是您如何形成成員函數指針。 請注意,無論您是否在類范圍內,唯一的方法就是使用&ClassName::FuncName &也是必填項。

第二個是通過成員函數指針調用成員時,必須明確指定要在其上調用成員函數的對象(在您的情況下為A型)。 在這種情況下,您必須指定this (由於這是一個指針,我們使用->*而不是.*

HTH

采用:

(this->*test_case[0].test_func)(1);

使用指針到成員函數的成員函數調用:

 test_case[0].test_func = &A::test_func_0; //note this also!
(this->*test_case[0].test_func)(1);

演示: http : //www.ideone.com/9o8C4

暫無
暫無

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

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