Templates in classes => what is wrong?

Xan xancorreu at gmail.com
Tue Apr 17 11:39:14 PDT 2012


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.


More information about the Digitalmars-d-learn mailing list