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
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);
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)();
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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With