#include <iostream>
#include <functional>
class Task {
public:
template <typename Func, typename... Args>
Task(Func&& f,Args&&... args) :
func_([=]()
{ f(args...); })
{}
void execute()
{
func_();
}
private:
std::function<void()> func_;
};
void someFunc(const std::string& name,int count)
{
std::cout << name << " " << count;
}
//Example of wanted use:
int main() {
int counter = 0;
std::string name("Some name...");
Task task(&someFunc,name,counter);
task.execute();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIFRhc2sgewoKICAgICBwdWJsaWM6CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBUYXNrKEZ1bmMmJiBmLEFyZ3MmJi4uLiBhcmdzKSA6CiAgICAgICAgICAgIGZ1bmNfKFs9XSgpCiAgICAgICAgICAgICB7IGYoYXJncy4uLik7IH0pCiAgICAgICAge30KCiAgICAgICAgdm9pZCBleGVjdXRlKCkgCiAgICAgICAgewogICAgICAgICAgICBmdW5jXygpOwogICAgICAgIH0KCiAgICAgcHJpdmF0ZToKICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZnVuY187CiAgICAgICAgCn07Cgp2b2lkIHNvbWVGdW5jKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLGludCBjb3VudCkKewogICBzdGQ6OmNvdXQgPDwgbmFtZSA8PCAiICIgPDwgY291bnQ7CgkKfQovL0V4YW1wbGUgb2Ygd2FudGVkIHVzZToKaW50IG1haW4oKSB7CgogICAgaW50IGNvdW50ZXIgPSAwOwogICAgc3RkOjpzdHJpbmcgbmFtZSgiU29tZSBuYW1lLi4uIik7CgogICAgVGFzayB0YXNrKCZzb21lRnVuYyxuYW1lLGNvdW50ZXIpOwogICAgdGFzay5leGVjdXRlKCk7CgogICAgcmV0dXJuIDA7Cn0=