카테고리 없음

store member function pointer in map

sunshout 2015. 4. 2. 18:34


#include <map>

#include <stdio.h>

#include <string>


using namespace std;

class A;

typedef int (A::*func) (int,int);


class A {

    public:

    map<std::string, func> info_dynamic;

    void init();

    int sum(int, int);

    void show(int, int);

};


int A::sum(int a, int b)

{

    printf("sum = %d\n", (a+b));

    return 0;

}


void A::init()

{

    info_dynamic.insert(pair<string, func>(string("key"), &A::sum));

}


void A::show(int a, int b)

{

    map<string, func>::iterator result = info_dynamic.find("key");

    (this->*(result->second))(a,b);

}

int main()

{

    A *a = new A();

    a->init();

    a->show(1,2);

    a->show(2,3);


    return 0;

}



compile:

# g++ func.c -std=c++11


result:

# ./a.out

sum = 3

sum = 5


In a class, member function pointer can be called like


&CLASS_name::FUNC_name


When you want to call member function pointer in a class,


this->*(member func pointer) (Params)