#include <vector>
#include <string>
#include <iostream>
#include <iomanip>

using namespace std;


class Cont
{
public:

    void add(int a)
    {
        m_vect.push_back(a);
    }

    template <class ModuleType>
    void map(ModuleType *module, void (ModuleType::*mapMethod)(int a))
    {
        for (int i = 0; i < m_vect.size(); i++)
            (module->*mapMethod)(m_vect[i]);
    }

private:

    std::vector<int> m_vect;

};

class Oper
{
public: 
    void mapMethod1(int a)
    {
        std::cout << a << std::endl;
    }

    void exec()
    {
        Cont cont;
        cont.add(1);
        cont.add(3);
        cont.add(4);

        cont.map<Oper>(this, &Oper::mapMethod1); // **?????? ??????????**
    }
};

int main()
{
    Oper oper;
    oper.exec();

    return 0;
}
