Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site











SourceForge.net Logo

Event

 

Basic Callbacks

 

 

main.cpp

 

#include <Core/Core.h>

 

using namespace Upp;

 

struct Foo {

    int x;

 

    void Action()                { Cout() << "Action: " << x << '\n'; }

    void ActionWithParam(int y)  { Cout() << "ActionWithParam: " << x + y << '\n'; }

 

    Event<> WhenDo;

 

    void Do()                    { WhenDo(); }

 

    Foo(int x = 0) : x(x) {}

};

 

void Fn()

{

    Cout() << "Fn!" << '\n';

}

 

struct Bar {

    Foo foo;

 

    Bar() {

        foo.WhenDo = [=] { Cout() << "foo's Do called\n"; };

    }

};

 

struct Safe : Pte<Safe> {

    void Action() { Cout() << "safe action!\n"; }

};

 

CONSOLE_APP_MAIN

{

    Foo a(10);

 

    Event<> ev1, ev2, ev4;

    Event<int> ev3;

 

    ev1 << [&] { a.Action(); };

    ev2 << [] { Fn(); };

    ev3 << [&](int x) { a.ActionWithParam(x); };

    ev4 << [&] { a.ActionWithParam(30); };

 

    ev1();

    ev2();

    ev3(10);

    ev4();

 

    Cout() << "---------\n";

    ev4 << ev2;

    ev4();

 

    Cout() << "---------\n";

    Bar b;

    b.foo.Do();

 

    Cout() << "---------\n";

    {

        Safe f;

        Ptr<Safe> p = &f;

        ev4 = [=] { if(p) p->Action(); };

        Cout() << "callback valid: " << (bool)ev4 << '\n';

        ev4();

    } // Safe f gets destroyed here, which makes capture 'p' NULL

    ev4(); // captured 'p' is now NULL, so no Action is called

}

 

 

 

 

Do you want to contribute?