Question about Mixin.
Agustin
wolftein1 at gmail.com
Wed Jun 19 17:21:44 PDT 2013
On Thursday, 20 June 2013 at 00:20:36 UTC, Agustin wrote:
> 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.
public class EventTemplate(T) : Event {
mixin Eventable!T;
protected __gshared HandlerList!T handler_;
}
More information about the Digitalmars-d-learn
mailing list