Re: mixin template had error by calling shared function
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
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
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
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
https://issues.dlang.org/show_bug.cgi?id=13850
Re: mixin template had error by calling shared function
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
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.