#include <functional>
#include <iostream>
void sampleFunction()
{
std::cout << "This is the sample function!\n";
}
void checkFunc(std::function<void()> const& func)
{
// Use operator bool to determine if callable target is available.
if (func)
{
std::cout << "Function is not empty! Calling function.\n";
func();
}
else
std::cout << "Function is empty. Nothing to do.\n";
}
int main()
{
std::function<void()> f1 = []{};
std::function<void()> f2(sampleFunction);
std::cout << "f1: ";
checkFunc(f1);
std::cout << "f2: ";
checkFunc(f2);
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KIAp2b2lkIHNhbXBsZUZ1bmN0aW9uKCkKewogICAgc3RkOjpjb3V0IDw8ICJUaGlzIGlzIHRoZSBzYW1wbGUgZnVuY3Rpb24hXG4iOwp9CiAKdm9pZCBjaGVja0Z1bmMoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbnN0JiBmdW5jKQp7CiAgICAvLyBVc2Ugb3BlcmF0b3IgYm9vbCB0byBkZXRlcm1pbmUgaWYgY2FsbGFibGUgdGFyZ2V0IGlzIGF2YWlsYWJsZS4KICAgIGlmIChmdW5jKSAgCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJGdW5jdGlvbiBpcyBub3QgZW1wdHkhIENhbGxpbmcgZnVuY3Rpb24uXG4iOwogICAgICAgIGZ1bmMoKTsKICAgIH0KICAgIGVsc2UKICAgICAgICBzdGQ6OmNvdXQgPDwgIkZ1bmN0aW9uIGlzIGVtcHR5LiBOb3RoaW5nIHRvIGRvLlxuIjsKfQogCmludCBtYWluKCkKewogICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGYxID0gW117fTsKICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmMihzYW1wbGVGdW5jdGlvbik7CiAKICAgIHN0ZDo6Y291dCA8PCAiZjE6ICI7CiAgICBjaGVja0Z1bmMoZjEpOwogCiAgICBzdGQ6OmNvdXQgPDwgImYyOiAiOwogICAgY2hlY2tGdW5jKGYyKTsKfQ==