#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;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKY2xhc3MgQ29udAp7CnB1YmxpYzoKCiAgICB2b2lkIGFkZChpbnQgYSkKICAgIHsKICAgICAgICBtX3ZlY3QucHVzaF9iYWNrKGEpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBNb2R1bGVUeXBlPgogICAgdm9pZCBtYXAoTW9kdWxlVHlwZSAqbW9kdWxlLCB2b2lkIChNb2R1bGVUeXBlOjoqbWFwTWV0aG9kKShpbnQgYSkpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3ZlY3Quc2l6ZSgpOyBpKyspCiAgICAgICAgICAgIChtb2R1bGUtPiptYXBNZXRob2QpKG1fdmVjdFtpXSk7CiAgICB9Cgpwcml2YXRlOgoKICAgIHN0ZDo6dmVjdG9yPGludD4gbV92ZWN0OwoKfTsKCmNsYXNzIE9wZXIKewpwdWJsaWM6IAogICAgdm9pZCBtYXBNZXRob2QxKGludCBhKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBhIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICB2b2lkIGV4ZWMoKQogICAgewogICAgICAgIENvbnQgY29udDsKICAgICAgICBjb250LmFkZCgxKTsKICAgICAgICBjb250LmFkZCgzKTsKICAgICAgICBjb250LmFkZCg0KTsKCiAgICAgICAgY29udC5tYXA8T3Blcj4odGhpcywgJk9wZXI6Om1hcE1ldGhvZDEpOyAvLyAqKj8/Pz8/PyA/Pz8/Pz8/Pz8/KioKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgT3BlciBvcGVyOwogICAgb3Blci5leGVjKCk7CgogICAgcmV0dXJuIDA7Cn0K