#include <iostream>
#include <string>
#include <map>

using namespace std;

class header
{
public:
    virtual void func(void)=0;
};

class func_1 : public header
{
public:
    virtual void func(void)
    {
        cout<<"func_1"<<endl;
    }
};

class func_2 : public header
{
public:
    virtual void func(void)
    {
        cout<<"func_2"<<endl;
    }
};

int main(void)
{
    map<string, header *> func;
    func["func_1"] = new func_1();
    func["func_2"] = new func_2();

    func["func_1"]->func();
    func["func_2"]->func();

    // 理論上要把 new 出來的東西給 delete 掉
    // 讓我偷懶一下吧

    return 0;
}
