Re: mixin template had error by calling shared function

2014-12-11 Thread Dan Olson via Digitalmars-d-learn
Here is a way that will work.

Vlasov Roman vlasovroman...@yandex.ru writes:
 I have this code

 mixin template Template(void function() func1, void function() func2)

mixin template Template(alias func1, alias func2)

 class SomeClass {
   mixin Template!(func, func23);

mixin Template!(func, func23);

--
dano


mixin template had error by calling shared function

2014-12-10 Thread Vlasov Roman via Digitalmars-d-learn

I have this code

import std.stdio;

mixin template Template(void function() func1, void function() 
func2) {


voidto() {
func1();
func2();
}
};

class SomeClass {
mixin Template!(func, func23);

void func() {
writeln(First function!);
}

void func23() {
writeln(First function!);
}

void toTemplate() {
to();
}
}

void main() {
SomeClass a = new SomeClass();

a.toTemplate();
}

After running the program give me SIGSEGV in func23();

Terminal with gdb:

Program received signal SIGSEGV, Segmentation fault.
0x00428352 in invariant._d_invariant(Object) ()
(gdb) up
#1  0x004257f7 in main.SomeClass.func23() ()


Manjaro Linux 0.9.0 x86_64
dmd 2.066
Kernel 3.14.4


Re: mixin template had error by calling shared function

2014-12-10 Thread Rikki Cattermole via Digitalmars-d-learn

On 10/12/2014 10:10 p.m., Vlasov Roman wrote:

I have this code

import std.stdio;

mixin template Template(void function() func1, void function() func2) {

 void to() {
 func1();
 func2();
 }
};

class SomeClass {
 mixin Template!(func, func23);

 void func() {
 writeln(First function!);
 }

 void func23() {
 writeln(First function!);
 }

 void toTemplate() {
 to();
 }
}

void main() {
 SomeClass a = new SomeClass();

 a.toTemplate();
}

After running the program give me SIGSEGV in func23();

Terminal with gdb:

Program received signal SIGSEGV, Segmentation fault.
0x00428352 in invariant._d_invariant(Object) ()
(gdb) up
#1  0x004257f7 in main.SomeClass.func23() ()


Manjaro Linux 0.9.0 x86_64
dmd 2.066
Kernel 3.14.4


Ugh, that's a compiler bug.
You should not be able to pass in delegates as function pointers to a 
mixin template.


A better way would be to pass in the names of the methods into the mixin 
template and then use string mixin's to call the methods.


Re: mixin template had error by calling shared function

2014-12-10 Thread via Digitalmars-d-learn
On Wednesday, 10 December 2014 at 09:41:43 UTC, Rikki Cattermole 
wrote:

On 10/12/2014 10:10 p.m., Vlasov Roman wrote:

I have this code

import std.stdio;

mixin template Template(void function() func1, void function() 
func2) {


void to() {
func1();
func2();
}
};

class SomeClass {
mixin Template!(func, func23);

void func() {
writeln(First function!);
}

void func23() {
writeln(First function!);
}

void toTemplate() {
to();
}
}

void main() {
SomeClass a = new SomeClass();

a.toTemplate();
}

After running the program give me SIGSEGV in func23();

Terminal with gdb:

Program received signal SIGSEGV, Segmentation fault.
0x00428352 in invariant._d_invariant(Object) ()
(gdb) up
#1  0x004257f7 in main.SomeClass.func23() ()


Manjaro Linux 0.9.0 x86_64
dmd 2.066
Kernel 3.14.4


Ugh, that's a compiler bug.
You should not be able to pass in delegates as function 
pointers to a mixin template.


A better way would be to pass in the names of the methods into 
the mixin template and then use string mixin's to call the 
methods.


Better yet, try this:

mixin template Template(void delegate() func1, void delegate() 
func2)


Re: mixin template had error by calling shared function

2014-12-10 Thread via Digitalmars-d-learn

https://issues.dlang.org/show_bug.cgi?id=13850


Re: mixin template had error by calling shared function

2014-12-10 Thread Vlasov Roman via Digitalmars-d-learn

On Wednesday, 10 December 2014 at 10:34:25 UTC, Marc Schütz wrote:
On Wednesday, 10 December 2014 at 09:41:43 UTC, Rikki 
Cattermole wrote:

On 10/12/2014 10:10 p.m., Vlasov Roman wrote:

I have this code

import std.stdio;

mixin template Template(void function() func1, void 
function() func2) {


   void to() {
   func1();
   func2();
   }
};

class SomeClass {
   mixin Template!(func, func23);

   void func() {
   writeln(First function!);
   }

   void func23() {
   writeln(First function!);
   }

   void toTemplate() {
   to();
   }
}

void main() {
   SomeClass a = new SomeClass();

   a.toTemplate();
}

After running the program give me SIGSEGV in func23();

Terminal with gdb:

Program received signal SIGSEGV, Segmentation fault.
0x00428352 in invariant._d_invariant(Object) ()
(gdb) up
#1  0x004257f7 in main.SomeClass.func23() ()


Manjaro Linux 0.9.0 x86_64
dmd 2.066
Kernel 3.14.4


Ugh, that's a compiler bug.
You should not be able to pass in delegates as function 
pointers to a mixin template.


A better way would be to pass in the names of the methods into 
the mixin template and then use string mixin's to call the 
methods.


Better yet, try this:

mixin template Template(void delegate() func1, void delegate() 
func2)


I tried this, but compiler give me error

main.d(12): Error: no 'this' to create delegate for func
main.d(12): Error: no 'this' to create delegate for func23

I think that error because i don't completly know dlang



Re: mixin template had error by calling shared function

2014-12-10 Thread Rikki Cattermole via Digitalmars-d-learn

On 11/12/2014 12:24 a.m., Vlasov Roman wrote:

On Wednesday, 10 December 2014 at 10:34:25 UTC, Marc Schütz wrote:

On Wednesday, 10 December 2014 at 09:41:43 UTC, Rikki Cattermole wrote:

On 10/12/2014 10:10 p.m., Vlasov Roman wrote:

I have this code

import std.stdio;

mixin template Template(void function() func1, void function() func2) {

   void to() {
   func1();
   func2();
   }
};

class SomeClass {
   mixin Template!(func, func23);

   void func() {
   writeln(First function!);
   }

   void func23() {
   writeln(First function!);
   }

   void toTemplate() {
   to();
   }
}

void main() {
   SomeClass a = new SomeClass();

   a.toTemplate();
}

After running the program give me SIGSEGV in func23();

Terminal with gdb:

Program received signal SIGSEGV, Segmentation fault.
0x00428352 in invariant._d_invariant(Object) ()
(gdb) up
#1  0x004257f7 in main.SomeClass.func23() ()


Manjaro Linux 0.9.0 x86_64
dmd 2.066
Kernel 3.14.4


Ugh, that's a compiler bug.
You should not be able to pass in delegates as function pointers to a
mixin template.

A better way would be to pass in the names of the methods into the
mixin template and then use string mixin's to call the methods.


Better yet, try this:

mixin template Template(void delegate() func1, void delegate() func2)


I tried this, but compiler give me error

main.d(12): Error: no 'this' to create delegate for func
main.d(12): Error: no 'this' to create delegate for func23

I think that error because i don't completly know dlang


This is why I didn't suggest this myself.
Basically you are trying to take a pointer to a function that takes an 
argument (this). But a delegate is not exactly that. A delegate is a 
function pointer + this pointer as well.

Essentially you can't do this for a type.