deeJ
deeJ

Reputation: 672

How to call a function using pointer-to-member-function

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.

Upvotes: 2

Views: 456

Answers (3)

Armen Tsirunyan
Armen Tsirunyan

Reputation: 132974

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

Upvotes: 5

Sarfaraz Nawaz
Sarfaraz Nawaz

Reputation: 361252

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

Upvotes: -1

Erik
Erik

Reputation: 91260

Use:

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

Upvotes: 1

Related Questions