#include <iostream>
#include <iterator>
#include <map>
using namespace std;
class Test;
typedef void (Test::*pFunc)(int);
class Test {
public:
Test(const std::string &name);
void f1(int);
void f2(int);
void f3(int);
void display(int i);
private:
static std::map<int, pFunc> num2func;
std::string classname;
};
std::map<int, pFunc> Test::num2func;
Test::Test(const std::string &name)
{
classname = name;
if (num2func.empty()) {
num2func[1] = &Test::f1;
num2func[2] = &Test::f2;
num2func[3] = &Test::f3;
}
}
void Test::display(int i)
{
if (num2func.find(i) != num2func.end()) {
(this->*num2func[i])(i);
}
}
void Test::f1(int n)
{
cout << classname << "\t" << n << endl;
}
void Test::f2(int n)
{
cout << classname << "\t" << n << endl;
}
void Test::f3(int n)
{
cout << classname << "\t" << n << endl;
}
int main(int argc, char *argv[])
{
Test t1("t1");
Test t2("t2");
t1.display(1);
t2.display(2);
return 0;
}
编译输出:
t1 1
t2 2