#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <iostream>
#include <cstdlib>
#include <functional>
void pushFunction(int fd)
{
std::string message = "hello";
std::function<std::string()> f = [message](){
return message;
};
write(fd, &f, sizeof(f));
}
int main()
{
int fd[2];
pipe( fd );
pushFunction(fd[1]);
std::function<std::string()>* fptr =
reinterpret_cast<std::function<std::string()>*>( malloc(sizeof(std::function<std::string()>)) );
read(fd[0], fptr, sizeof(*fptr));
std::cout << "Function call: " << (*fptr)() <<std::endl;
close(fd[0]);
close(fd[1]);
free(fptr);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnZvaWQgcHVzaEZ1bmN0aW9uKGludCBmZCkKewoJc3RkOjpzdHJpbmcgbWVzc2FnZSA9ICJoZWxsbyI7CglzdGQ6OmZ1bmN0aW9uPHN0ZDo6c3RyaW5nKCk+IGYgPSBbbWVzc2FnZV0oKXsKCQlyZXR1cm4gbWVzc2FnZTsKCX07Cgl3cml0ZShmZCwgJmYsIHNpemVvZihmKSk7CgkKfQoKaW50IG1haW4oKQp7CglpbnQgICAgIGZkWzJdOwoJcGlwZSggZmQgKTsKCglwdXNoRnVuY3Rpb24oZmRbMV0pOwoJc3RkOjpmdW5jdGlvbjxzdGQ6OnN0cmluZygpPiogZnB0ciA9CgkJcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmZ1bmN0aW9uPHN0ZDo6c3RyaW5nKCk+Kj4oIG1hbGxvYyhzaXplb2Yoc3RkOjpmdW5jdGlvbjxzdGQ6OnN0cmluZygpPikpICk7CglyZWFkKGZkWzBdLCBmcHRyLCBzaXplb2YoKmZwdHIpKTsKCXN0ZDo6Y291dCA8PCAiRnVuY3Rpb24gY2FsbDogIiA8PCAoKmZwdHIpKCkgPDxzdGQ6OmVuZGw7CgljbG9zZShmZFswXSk7CgljbG9zZShmZFsxXSk7CglmcmVlKGZwdHIpOwoJcmV0dXJuIDA7Cn0K