digitalmars.D.learn - Static member inside a class.
- Agustin (12/12) Jun 13 2013 I would like to know if static members are shared between 2
- Steven Schveighoffer (9/21) Jun 13 2013 It's possible, and works just like you have it (syntax is slightly
- w0rp (20/32) Jun 13 2013 The members are shared between different modules, yes. You use .
- Agustin (32/98) Jun 13 2013 On Thursday, 13 June 2013 at 20:00:59 UTC, w0rp wrote:
I would like to know if static members are shared between 2 library. For example: Class A { static uint var; } From Library A: A::var = 3; From Library B: if( A::var == 3 ) ... Its this possible? if not, its any way to make it happend?
Jun 13 2013
On Thu, 13 Jun 2013 15:47:22 -0400, Agustin <agustin.l.alvarez hotmail.com> wrote:I would like to know if static members are shared between 2 library. For example: Class A { static uint var; } From Library A: A::var = 3; From Library B: if( A::var == 3 ) ... Its this possible? if not, its any way to make it happend?It's possible, and works just like you have it (syntax is slightly different, use A.var) However, static means "thread local" So you can't access the same A.var from multiple threads. To access from multiple threads, declare var like: shared static uint var; -Steve
Jun 13 2013
On Thursday, 13 June 2013 at 19:47:23 UTC, Agustin wrote:I would like to know if static members are shared between 2 library. For example: Class A { static uint var; } From Library A: A::var = 3; From Library B: if( A::var == 3 ) ... Its this possible? if not, its any way to make it happend?The members are shared between different modules, yes. You use . instead of :: for scope resolution. You can also initialise a few things in a static constructors at class scope... class A { static uint var; static this() { var = 3; } } Or at module scope... class A { static uint var; } static this() { A.var = 3; } You should note that the data isn't shared between threads by default, but that's another detail. You can also usually produce a design that uses non-static data instead of static data.
Jun 13 2013
On Thursday, 13 June 2013 at 19:59:11 UTC, Steven Schveighoffer wrote:On Thu, 13 Jun 2013 15:47:22 -0400, Agustin <agustin.l.alvarez hotmail.com> wrote:On Thursday, 13 June 2013 at 20:00:59 UTC, w0rp wrote:I would like to know if static members are shared between 2 library. For example: Class A { static uint var; } From Library A: A::var = 3; From Library B: if( A::var == 3 ) ... Its this possible? if not, its any way to make it happend?It's possible, and works just like you have it (syntax is slightly different, use A.var) However, static means "thread local" So you can't access the same A.var from multiple threads. To access from multiple threads, declare var like: shared static uint var; -SteveOn Thursday, 13 June 2013 at 19:47:23 UTC, Agustin wrote:Thanks for taking the time to explain me, i'm currently doing an event system for my game, and i came out with the idea of an Event System. \ [1] - Map each event to an ID with their name. Event { ..... } PlayerLoginEvent : Event { ..... } EventManager.callEvent(PlayerLoginEvent(Player)); EventManager.registerListener!PlayerLoginEvent(delegate) { Map[ID(PlayerLoginEvent.Name)] ~ delegate; } \ [2] - Have a static list inside each event class. PlayerLoginEvent : Event { Static Delegates; .... } EventManager.registerListener!PlayerLoginEvent(delegate) { // T -> Template T.Delegates ~ delegate; // No lookup in a associative array. } So thats why i was asking about the static member, thanks!.I would like to know if static members are shared between 2 library. For example: Class A { static uint var; } From Library A: A::var = 3; From Library B: if( A::var == 3 ) ... Its this possible? if not, its any way to make it happend?The members are shared between different modules, yes. You use . instead of :: for scope resolution. You can also initialise a few things in a static constructors at class scope... class A { static uint var; static this() { var = 3; } } Or at module scope... class A { static uint var; } static this() { A.var = 3; } You should note that the data isn't shared between threads by default, but that's another detail. You can also usually produce a design that uses non-static data instead of static data.
Jun 13 2013