Templates in classes => what is wrong?

Xan xancorreu at gmail.com
Wed Apr 18 07:45:07 PDT 2012


On Tuesday, 17 April 2012 at 18:39:16 UTC, Xan wrote:
> On Tuesday, 17 April 2012 at 18:25:21 UTC, Ali Çehreli wrote:
>> On 04/17/2012 11:13 AM, Xan wrote:
>>
>> > The idea is behind this https://gist.github.com/2407923
>> > But I receive:
>> >
>> > $ gdmd-4.6 algorisme_code.d
>> > algorisme_code.d:22: Error: variable codi cannot be read at
>> compile time
>> > algorisme_code.d:22: Error: argument to mixin must be a
>> string, not (codi)
>>
>> mixin is about code generation. For that reason the string 
>> that is given to it must be available at compile time. Upon 
>> analyzing the code, that is the case in your example, but 
>> because mixin() appears inside the constructor, it cannot use 
>> a string parameter.
>>
>> That's why I had used a template parameter for the function 
>> string. There may be a number of solutions but only you can 
>> decide on what to do. One solution is to mixin the delegate 
>> outside of the constructor and pass as an argument along with 
>> its string representation:
>>
>>    // Untested code
>>    this(... Funcio funcio, string funcioText) {
>>        ...
>>    }
>>
>> In main:
>>
>>    enum funcioText = "...";
>>    auto funcio = mixin(funcioText);
>>
>>    ... new Algorisme(..., funcio, funcioText);
>>
>> Ali
>
> What is change is this code? Is it the same as this 
> https://gist.github.com/2407923 (I revise the code)?
>
> With my (v. 2) code I receive the errors:
>
> $ gdmd-4.6 algorisme_code.d
> algorisme_code.d:44: Error: variable codi cannot be read at 
> compile time
> algorisme_code.d:44: Error: argument to mixin must be a string, 
> not (codi)
> algorisme_code.d:45: Error: constructor 
> algorisme_code.Algorisme!(int,int).Algorisme.this (string nom, 
> uint versio, int function(int) funcio, string codi) is not 
> callable using argument types (string,int,_error_,string)
>
>
> Why the string is not given at compile code? I don't understand 
> it!
>
> Xan.


It works with enum instead of string:
https://gist.github.com/2407923

Thanks all of you,
Xan.



More information about the Digitalmars-d-learn mailing list