mixin template had error by calling shared function

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Dec 10 02:34:24 PST 2014


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.
>> 0x0000000000428352 in invariant._d_invariant(Object) ()
>> (gdb) up
>> #1  0x00000000004257f7 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)


More information about the Digitalmars-d-learn mailing list