On Wednesday, 19 June 2013 at 23:35:16 UTC, Ali Çehreli wrote:
On 06/19/2013 04:29 PM, Agustin wrote:
Hello guys, my question is, its possible to write a mixin in a
class,
then if that class is inherited, the mixin will be written
again instead
of written the mixin again in the class child, for example:
Class A(T)
{
mixin(WriteFunctionFor!(A));
}
Class B : A(B)
{
... -> mixin is written for B without need to write
("mixin(Write...))")
}
Class C : A(C)
{
... -> mixin is written for C without need to write
("mixin(Write...))")
}
Yes:
import std.stdio;
template WriteFunctionFor(T)
{
T data;
void foo()
{
writefln("I am working with a %s.", T.stringof);
}
}
class A(T)
{
mixin WriteFunctionFor!T;
}
class B : A!B
{}
class C : A!C
{}
void main()
{
auto b = new B();
b.foo();
auto c = new C();
c.foo();
}
The output:
I am working with a B.
I am working with a C.
Ali
Thanks!, now i'm trying to do that but its not working :(.
template Eventable(T) {
final static __gshared public HandlerList!T getHandler() {
if( handler_ is null ) {
handler_ = new HandlerList!T();
}
return handler_;
}
}
public class EventTemplate(T) : Event {
mixin Eventable!T;
}
class TestEvent : EventTemplate!(TestEvent) {
double x = 0.0;
}
TestEvent.getHandler() -> wont work.