#include <iostream>
#include <stack>
#include <functional>
std::stack<std::function<void(void)>> someJobQueue;
template <typename T>
void submitJobToPool(std::string from_here, T callable)
{
someJobQueue.push(std::bind([callable](std::string from_here){
std::cout << "from_here: " << from_here << std::endl;
callable(); },
from_here));
}
void runJobFromPool()
{
auto job = someJobQueue.top();
someJobQueue.pop();
job();
}
int main() {
submitJobToPool(__func__, [](){ std::cout << "It's me." << std::endl; });
runJobFromPool();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgoKc3RkOjpzdGFjazxzdGQ6OmZ1bmN0aW9uPHZvaWQodm9pZCk+PiBzb21lSm9iUXVldWU7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBzdWJtaXRKb2JUb1Bvb2woc3RkOjpzdHJpbmcgZnJvbV9oZXJlLCBUIGNhbGxhYmxlKQp7CiAgICBzb21lSm9iUXVldWUucHVzaChzdGQ6OmJpbmQoW2NhbGxhYmxlXShzdGQ6OnN0cmluZyBmcm9tX2hlcmUpewogICAgCXN0ZDo6Y291dCA8PCAiZnJvbV9oZXJlOiAiIDw8IGZyb21faGVyZSA8PCBzdGQ6OmVuZGw7CiAgICAJY2FsbGFibGUoKTsgfSwKICAgICAgICBmcm9tX2hlcmUpKTsKfQoKdm9pZCBydW5Kb2JGcm9tUG9vbCgpCnsKICAgIGF1dG8gam9iID0gc29tZUpvYlF1ZXVlLnRvcCgpOwogICAgc29tZUpvYlF1ZXVlLnBvcCgpOwogICAgam9iKCk7Cn0KCmludCBtYWluKCkgewogICAgc3VibWl0Sm9iVG9Qb29sKF9fZnVuY19fLCBbXSgpeyBzdGQ6OmNvdXQgPDwgIkl0J3MgbWUuIiA8PCBzdGQ6OmVuZGw7IH0pOwogICAgcnVuSm9iRnJvbVBvb2woKTsKICAgIHJldHVybiAwOwp9