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.alva...@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
On Thursday, 13 June 2013 at 20:00:59 UTC, w0rp wrote:
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.
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!.