Template bug with second mixin?
Andre via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Dec 5 01:19:27 PST 2014
I think I mimized the coding too much.
What I actually want to achieve is to generate read methods
in the structure for different data types (Ubyte, short, int):
I thought the eponymous trick would insert the content of the
enum instead the name itself?
string getReadMethods(string methodName, string dataType)
{
return dataType~` `~methodName~`(size_t idx) {
return v_arr[idx].get!`~dataType~`; }`;
}
template insertReadMethods(string MethodName, DataType)
{
enum insertReadMethods = getReadMethods(MethodName,
DataType.stringof);
}
struct Data
{
mixin insertReadMethods!("readTinyInt", ubyte);
mixin insertReadMethods!("readShortInt", short);
}
void main(){}
Kind regards
André
On Friday, 5 December 2014 at 07:28:26 UTC, ketmar via
Digitalmars-d-learn wrote:
> On Fri, 05 Dec 2014 07:06:34 +0000
> Andre via Digitalmars-d-learn
> <digitalmars-d-learn at puremagic.com> wrote:
>
>> Hi,
>>
>> following coding fails to compile with 2.066.0 and
>> 2.067.0-b1.
>>
>>
>> This is a bug, or?
>> source\app.d(9): Error: mixin
>> app.Data.insertReadMethods!("readTinyInt", ubyte)
>> is not defined
>>
>> template insertReadMethods(string MethodName, DataType)
>> {
>> enum insertReadMethods = "";
>> }
>>
>> struct Data
>> {
>> mixin insertReadMethods!("readTinyInt", ubyte);
>> mixin insertReadMethods!("readTinyInt", ubyte);
>> }
>>
>> void main(){}
> i.e. "mixin template" inserts it's names into the same scope,
> and
> compiler searching symbols from innermost scope up to module
> scope.
>
> here first mixin inserts 'enum' member, and searching for
> second mixin
> hits that enum member. to avoid things going out of control
> compiler is
> not trying to guess what you want but stops with error, giving
> you a
> chance to fix the code.
More information about the Digitalmars-d-learn
mailing list