thanks a lot. That makes sense.

Kind regards
André

On Friday, 5 December 2014 at 09:29:21 UTC, ketmar via Digitalmars-d-learn wrote:
On Fri, 05 Dec 2014 09:19:27 +0000
Andre via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:

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(){}

you musunderstood how mixin templates works. mixin templates are more
like macroses than templates per se, so you don't need to assign
anything to enum to get the result. i.e.


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 =*/ // no need to do this
   // do that instead ;-)
   mixin(getReadMethods(MethodName, DataType.stringof));
}

struct Data
{
        mixin insertReadMethods!("readTinyInt", ubyte);
        mixin insertReadMethods!("readShortInt", short);
}


think about mixin templates as macro definitions which will be just
inserted where you instantiated them.

Reply via email to