What is the syntax to create heap allocated closure manage by shared_ptr. I want to pass closures to functions and be able to pass nullptr. Seems like using a shared_ptr< ::std::function<void()> but I cannot figure the syntax to initialize that from a lambda expresion
4 Answers
It should be something like
auto lambda = []() { /* do something usefull */ }; auto p = std::make_shared<std::function<void()>>(lambda); But actually you may no need shared_ptr, since function can be constructed from nullptr.
std::function<void()> fnc(nullptr); Comments
Generally speaking, you want to create a shared_ptr<X> via make_shared, initializing the X object with some Y object. Then generally the code to do that is
auto ptr = make_shared<X>(someY); In your case, X is the std::function type, and the someY is your lambda. Once you have that, it's pretty straight forward:
auto funPtr = std::make_shared<function<void()>>( [](){ std::cout << "Hello World!\n"; } ); (*funPtr)(); Comments
You can do it in two ways:
std::function<void()> lambda = [](){}; auto heapPtr = std::make_shared<std::function<void()>>(lambda); auto heapPtr2 = new std::function<void()>(lambda); You might also find the following questions useful: