#include <string>
#include <vector>
#include <functional>
struct Task
{
std:: string Name;
std:: vector < Task* > * Subtasks;
std:: function < void ( std:: string const & ) > Job;
Task( ) { }
Task( std:: string const & arg_0) { Name = arg_0; }
Task( std:: string const & arg_0, std:: vector < Task* > * arg_1) { Name = arg_0; Subtasks = arg_1; }
Task( std:: string const & arg_0, std:: function < void ( std:: string const & ) > arg_1)
{ Name = arg_0; Job = arg_1; }
~Task( ) { for ( auto tItem : * Subtasks) { delete tItem; } }
} ;
class Console
{
private :
std:: vector < Task* > Routine;
public :
~Console( ) { for ( auto tItem : Routine) { delete tItem; } } //I thought that this is not needed but Valgrind thinks otherwise, strangely the deconstructors of the Tasks are not called, I guess.
void add( Task * arg_0) { Routine.push_back ( arg_0) ; }
void foo( )
{
Task * tTask = new Task( ) ;
//Task *tTask = new Task("Name");
//Task *tTask = new Task("Name", [this](std::string const &arg_0){ ; });
add( tTask) ;
}
} ;
int main( )
{
Console _Console;
_Console.foo ( ) ;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CgpzdHJ1Y3QgVGFzawp7CiAgc3RkOjpzdHJpbmcgTmFtZTsKCiAgc3RkOjp2ZWN0b3I8VGFzayo+ICpTdWJ0YXNrczsKICBzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpzdHJpbmcgY29uc3QgJik+IEpvYjsKCiAgVGFzaygpIHt9CiAgVGFzayhzdGQ6OnN0cmluZyBjb25zdCAmYXJnXzApIHsgTmFtZSA9IGFyZ18wOyB9CiAgVGFzayhzdGQ6OnN0cmluZyBjb25zdCAmYXJnXzAsIHN0ZDo6dmVjdG9yPFRhc2sqPiAqYXJnXzEpIHsgTmFtZSA9IGFyZ18wOyBTdWJ0YXNrcyA9IGFyZ18xOyB9CiAgVGFzayhzdGQ6OnN0cmluZyBjb25zdCAmYXJnXzAsIHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6OnN0cmluZyBjb25zdCAmKT4gYXJnXzEpCiAgeyBOYW1lID0gYXJnXzA7IEpvYiA9IGFyZ18xOyB9CgogIH5UYXNrKCkgeyBmb3IgKGF1dG8gdEl0ZW0gOiAqU3VidGFza3MpIHsgZGVsZXRlIHRJdGVtOyB9IH0KfTsKCmNsYXNzIENvbnNvbGUKewpwcml2YXRlOgogIHN0ZDo6dmVjdG9yPFRhc2sqPiBSb3V0aW5lOwoKcHVibGljOgogIH5Db25zb2xlKCkgeyBmb3IgKGF1dG8gdEl0ZW0gOiBSb3V0aW5lKSB7IGRlbGV0ZSB0SXRlbTsgfSB9IC8vSSB0aG91Z2h0IHRoYXQgdGhpcyBpcyBub3QgbmVlZGVkIGJ1dCBWYWxncmluZCB0aGlua3Mgb3RoZXJ3aXNlLCBzdHJhbmdlbHkgdGhlIGRlY29uc3RydWN0b3JzIG9mIHRoZSBUYXNrcyBhcmUgbm90IGNhbGxlZCwgSSBndWVzcy4KCiAgdm9pZCBhZGQoVGFzayAqYXJnXzApIHsgUm91dGluZS5wdXNoX2JhY2soYXJnXzApOyB9CgogIHZvaWQgZm9vKCkKICB7CiAgICBUYXNrICp0VGFzayA9IG5ldyBUYXNrKCk7CiAgICAvL1Rhc2sgKnRUYXNrID0gbmV3IFRhc2soIk5hbWUiKTsKICAgIC8vVGFzayAqdFRhc2sgPSBuZXcgVGFzaygiTmFtZSIsIFt0aGlzXShzdGQ6OnN0cmluZyBjb25zdCAmYXJnXzApeyA7IH0pOwogICAgYWRkKHRUYXNrKTsKICB9Cn07CgppbnQgbWFpbigpCnsKCUNvbnNvbGUgX0NvbnNvbGU7CglfQ29uc29sZS5mb28oKTsKfQ==