#include <iostream>
#include <vector>
#include <string>
#include <functional>
#include <utility>
class cButton{
private:
const std::function<void()> effect;
public:
cButton(const std::function<void()>& effect);
void onClick();};
cButton::cButton(const std::function<void()>& effect): effect(effect){}
class cMessage{
public:
std::vector<cButton*> button;
cMessage(const std::vector<std::function<void()> >& effect);};
cMessage::cMessage(const std::vector<std::function<void()> >& effect){
for(unsigned int i = 0; i < effect.size(); i++)
button.push_back(new cButton(effect[i])); }
void cButton::onClick(){
if(effect) effect();
}
int main(){
cMessage* message{};
{
const std::pair<const std::string, const unsigned int> var("test", 1);
std::function<void()> f = [var](){ std::cout << var.first << std::endl << var.second << std::endl; };
message = new cMessage( {f} );
}
message->button[0]->onClick();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHV0aWxpdHk+CgpjbGFzcyBjQnV0dG9uewogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZWZmZWN0OwogICAgcHVibGljOgogICAgICAgIGNCdXR0b24oY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiBlZmZlY3QpOwogICAgICAgIHZvaWQgb25DbGljaygpO307CgpjQnV0dG9uOjpjQnV0dG9uKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYgZWZmZWN0KTogZWZmZWN0KGVmZmVjdCl7fQoKCmNsYXNzIGNNZXNzYWdlewogICAgcHVibGljOgogICAgICAgIHN0ZDo6dmVjdG9yPGNCdXR0b24qPiBidXR0b247CiAgICAgICAgY01lc3NhZ2UoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+ID4mIGVmZmVjdCk7fTsKCgpjTWVzc2FnZTo6Y01lc3NhZ2UoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+ID4mIGVmZmVjdCl7CiAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZWZmZWN0LnNpemUoKTsgaSsrKQogICAgICAgIGJ1dHRvbi5wdXNoX2JhY2sobmV3IGNCdXR0b24oZWZmZWN0W2ldKSk7IH0KCgp2b2lkIGNCdXR0b246Om9uQ2xpY2soKXsKICAgIGlmKGVmZmVjdCkgZWZmZWN0KCk7CiAgICB9CiAgICAKaW50IG1haW4oKXsKICAgIGNNZXNzYWdlKiBtZXNzYWdle307CiAgICB7CiAgICAJY29uc3Qgc3RkOjpwYWlyPGNvbnN0IHN0ZDo6c3RyaW5nLCBjb25zdCB1bnNpZ25lZCBpbnQ+IHZhcigidGVzdCIsIDEpOwogICAgIAlzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZiA9IFt2YXJdKCl7IHN0ZDo6Y291dCA8PCB2YXIuZmlyc3QgPDwgc3RkOjplbmRsIDw8IHZhci5zZWNvbmQgPDwgc3RkOjplbmRsOyB9OwogICAgIAltZXNzYWdlID0gbmV3IGNNZXNzYWdlKCB7Zn0gKTsKICAgIH0gCiAgICBtZXNzYWdlLT5idXR0b25bMF0tPm9uQ2xpY2soKTsKfQ==