#include <vector>
#include <functional>
#include <utility>
#include <string>
#include <iostream>
// cButton.h
class cButton{
private:
const std::function<void()> effect;
public:
cButton(const std::function<void()>& effect);
void onClick();
};
// cButton.cpp
cButton::cButton(const std::function<void()>& effect): effect(effect){}
void cButton::onClick(){
if(effect) effect();
}
class cMessage{
public:
cMessage(const std::vector<std::function<void()> >& effect);
};
// cMessage.cpp
cMessage::cMessage(const std::vector<std::function<void()> >& effect){
for(unsigned int i = 0; i < effect.size(); i++)
{
cButton *b = new cButton(effect[i]);
b->onClick();
}
}
int main(){
const std::pair<const std::string, const unsigned int> var("test", 1);
cMessage m ( {
[var](){ std::cout << var.first << std::endl << var.second << std::endl; } } );
return 0;}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CgovLyBjQnV0dG9uLmgKY2xhc3MgY0J1dHRvbnsKICAgIHByaXZhdGU6CiAgICAgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVmZmVjdDsKICAgIHB1YmxpYzoKICAgICAgICBjQnV0dG9uKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYgZWZmZWN0KTsKICAgICAgICB2b2lkIG9uQ2xpY2soKTsKfTsKCi8vIGNCdXR0b24uY3BwCmNCdXR0b246OmNCdXR0b24oY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiBlZmZlY3QpOiBlZmZlY3QoZWZmZWN0KXt9Cgp2b2lkIGNCdXR0b246Om9uQ2xpY2soKXsKICAgIGlmKGVmZmVjdCkgZWZmZWN0KCk7Cn0KICAgIApjbGFzcyBjTWVzc2FnZXsKICAgIHB1YmxpYzoKICAgICAgICBjTWVzc2FnZShjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gPiYgZWZmZWN0KTsKfTsKCi8vIGNNZXNzYWdlLmNwcApjTWVzc2FnZTo6Y01lc3NhZ2UoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+ID4mIGVmZmVjdCl7CiAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZWZmZWN0LnNpemUoKTsgaSsrKQogICAgewogICAgICAgIGNCdXR0b24gKmIgPSBuZXcgY0J1dHRvbihlZmZlY3RbaV0pOyAKICAgICAgICBiLT5vbkNsaWNrKCk7CiAgICB9Cn0KCmludCBtYWluKCl7CmNvbnN0IHN0ZDo6cGFpcjxjb25zdCBzdGQ6OnN0cmluZywgY29uc3QgdW5zaWduZWQgaW50PiB2YXIoInRlc3QiLCAxKTsKY01lc3NhZ2UgbSAoIHsKICAgIFt2YXJdKCl7IHN0ZDo6Y291dCA8PCB2YXIuZmlyc3QgPDwgc3RkOjplbmRsIDw8IHZhci5zZWNvbmQgPDwgc3RkOjplbmRsOyB9IH0gKTsKcmV0dXJuIDA7fQ==