#include <vector>
#include <iostream>
#include <string>
#include <memory>
#include <math.h>
#include <list>
#include <thread>
#include <atomic>
#include <functional>
using namespace std;
class MClass
{
public:
std::function<void(void)> func_ptr;
void setFuncPtr(const std::function<void(void)>& ptr)
{
func_ptr = ptr;
}
void callFuncPtr()
{
func_ptr();
}
};
void globalFunction() {
std::cout << " do globalFunction " << std::endl;
}
struct Test
{
void print() { cout << "Test::print" << endl; }
};
int main(int argc, int argv[])
{
MClass m;
m.setFuncPtr(globalFunction);
m.callFuncPtr();
m.setFuncPtr([](){ std::cout << " do something " << std::endl; });
m.callFuncPtr();
Test t;
m.setFuncPtr(std::bind(&Test::print, t));
m.callFuncPtr();
return(0);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHRocmVhZD4KI2luY2x1ZGUgPGF0b21pYz4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCiBjbGFzcyBNQ2xhc3MKewpwdWJsaWM6CiAgc3RkOjpmdW5jdGlvbjx2b2lkKHZvaWQpPiBmdW5jX3B0cjsKCiAgdm9pZCBzZXRGdW5jUHRyKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCh2b2lkKT4mIHB0cikKICB7CiAgICBmdW5jX3B0ciA9IHB0cjsKICB9CgogIHZvaWQgY2FsbEZ1bmNQdHIoKQogIHsKICAgIGZ1bmNfcHRyKCk7CiAgfQp9OwogCiB2b2lkIGdsb2JhbEZ1bmN0aW9uKCkgeyAKIHN0ZDo6Y291dCA8PCAiIGRvIGdsb2JhbEZ1bmN0aW9uICIgPDwgc3RkOjplbmRsOwogfQoKIHN0cnVjdCBUZXN0CiB7CiAgIHZvaWQgcHJpbnQoKSB7IGNvdXQgPDwgIlRlc3Q6OnByaW50IiA8PCBlbmRsOyB9CiB9OwoKCmludCBtYWluKGludCBhcmdjLCBpbnQgYXJndltdKQp7CiAgIE1DbGFzcyBtOwogICBtLnNldEZ1bmNQdHIoZ2xvYmFsRnVuY3Rpb24pOwogICBtLmNhbGxGdW5jUHRyKCk7CgogICBtLnNldEZ1bmNQdHIoW10oKXsgc3RkOjpjb3V0IDw8ICIgZG8gc29tZXRoaW5nICIgPDwgc3RkOjplbmRsOyB9KTsKICAgbS5jYWxsRnVuY1B0cigpOwoKICAgVGVzdCB0OwogICBtLnNldEZ1bmNQdHIoc3RkOjpiaW5kKCZUZXN0OjpwcmludCwgdCkpOwogICBtLmNhbGxGdW5jUHRyKCk7CiAgcmV0dXJuKDApOwp9