如何使用成员函数指针调用函数

发布于 2024-10-20 19:06:40 字数 416 浏览 3 评论 0原文

我有一个类:

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);
}

无论我尝试什么组合,我的代码的最后一行都不起作用(编译错误)。

I have a class:

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];
};

Now I want to call test_func() inside run():

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

The last line of my code, doesn't work(compile error), no matter what combination I try.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡淡の花香 2024-10-27 19:06:40

使用这个:

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

注意你有两个错误。第一个是如何形成成员函数指针。请注意,唯一的方法是使用 &ClassName::FuncName 无论您是否在类范围内。 &也是强制性的。

第二个是,当您通过成员函数指针调用成员时,必须显式指定要调用成员函数的对象(在您的情况下为 A 类型)。在这种情况下,您必须指定 this (由于这是一个指针,我们使用 ->* 而不是 .*

HTH

Use this:

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

Notice that you had 2 errors. The first one was how you formed the member-function-pointer. Note that the only way to do it is to use &ClassName::FuncName regardless of whether you're at class scope or not. & is mandatory too.

The second is that when you call a member via a member function pointer, you must explicitly specif y the object (of type A in your case) on which to call the member function. In this case you must specify this (and since this is a pointer we use ->* rather than .*)

HTH

浅笑依然 2024-10-27 19:06:40

使用:

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

Use:

(this->*test_case[0].test_func)(1);
默嘫て 2024-10-27 19:06:40

使用指向成员函数的指针调用成员函数:

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

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

Member function call using pointer-to-member-function:

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

Demo : http://www.ideone.com/9o8C4

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文