Thread overview
How to convert int type to string "int" ?
Jun 01, 2014
bioinfornatics
Jun 01, 2014
bioinfornatics
Jun 01, 2014
Tobias Pankrath
Jun 01, 2014
bioinfornatics
Jun 01, 2014
bioinfornatics
Jun 01, 2014
bioinfornatics
June 01, 2014
Hi,

All is in the title.
I need this to do a tupleof enhanced, that mean:
   - .tupleof need an instance me i want to do this on type
diretcly
   - .tupleof do not bind to member name i need this


for this i strat to this code:

import std.stdio;
import std.typecons;
import std.conv;

struct Coord
{
     int x;
     int y;
     int z;
}

template toTuple(T){
     static string maker(){
         string statement = "alias Tuple!(";
         foreach(const memberName; __traits(allMembers, T)){
             statement ~=  to!string(typeof(__traits(getMember, T,
memberName)))  ~ ",\"" ~ memberName ~ "\", " ;
         }
         statement = statement[O..$-1] ~ ") t;" ; // $-1 to remove
extra comma
         return statement;
     }
     enum toTuple = mixin( maker() );
}


but that fail on typeof(__traits(getMember, T, memberName) becase
that return a type and not a string.


Thaks for your help
June 01, 2014
On Sunday, 1 June 2014 at 13:34:20 UTC, bioinfornatics wrote:
> Hi,
>
> All is in the title.
> I need this to do a tupleof enhanced, that mean:
>    - .tupleof need an instance me i want to do this on type
> diretcly
>    - .tupleof do not bind to member name i need this
>
>
> for this i strat to this code:
>
> import std.stdio;
> import std.typecons;
> import std.conv;
>
> struct Coord
> {
>      int x;
>      int y;
>      int z;
> }
>
> template toTuple(T){
>      static string maker(){
>          string statement = "alias Tuple!(";
>          foreach(const memberName; __traits(allMembers, T)){
>              statement ~=  to!string(typeof(__traits(getMember, T,
> memberName)))  ~ ",\"" ~ memberName ~ "\", " ;
>          }
>          statement = statement[O..$-1] ~ ") t;" ; // $-1 to remove
> extra comma
>          return statement;
>      }
>      enum toTuple = mixin( maker() );
> }
>
>
> but that fail on typeof(__traits(getMember, T, memberName) becase
> that return a type and not a string.
>
>
> Thaks for your help

I find this: typeid(typeof(__traits(getMember, T,
memberName))).toString
but that do not works at compile time.

Error: static variable typeid(int) cannot be read at compile time
June 01, 2014
Maybe http://dlang.org/property.html#stringof helps.
June 01, 2014
I bam close to be done

import std.stdio;
import std.typecons;
import std.conv;

struct Coord
{
     int x;
     int y;
     int z;
}

template toTuple(T){
     static string maker(){
         string statement = "alias Tuple!(";
         foreach(const memberName; __traits(allMembers, T)){
             statement ~=  typeof(__traits(getMember, T,
memberName)).stringof  ~ ",\"" ~ memberName ~ "\", " ;
         }
         statement = statement[0..$-2] ~ ") toTuple;" ; // $-1 to
remove extra comma
         return statement;
     }
     pragma( msg, maker() );
     mixin( maker() );
}

void main()
{
     //auto a = c.tupleof;
     auto a = toTuple!Coord;
}



$ ldc2 -w -of"testTupleof" "testTupleof.d"
alias Tuple!(int,"x", int,"y", int,"z") toTuple;
testTupleof.d(29): Error: type Tuple!(int, "x", int, "y", int,
"z") has no value
June 01, 2014
On Sunday, 1 June 2014 at 13:52:27 UTC, Tobias Pankrath wrote:
> Maybe http://dlang.org/property.html#stringof helps.

yes that help a lot thanks
June 01, 2014
On Sunday, 1 June 2014 at 13:58:03 UTC, bioinfornatics wrote:
> On Sunday, 1 June 2014 at 13:52:27 UTC, Tobias Pankrath wrote:
>> Maybe http://dlang.org/property.html#stringof helps.
>
> yes that help a lot thanks

End of spam ( joke ^^)


I found it :-)

import std.stdio;
import std.typecons;
import std.conv;

struct Coord
{
     int x;
     int y;
     int z;
}

template toTuple(T){
     static string maker(){
         string statement = "alias toTuple = Tuple!(";
         foreach(const memberName; __traits(allMembers, T)){
             statement ~=  typeof(__traits(getMember, T,
memberName)).stringof  ~ ",\"" ~ memberName ~ "\", " ;
         }
         statement = statement[0..$-2] ~ ") ;" ; // $-1 to remove
extra comma
         return statement;
     }
     pragma( msg, maker() );
     mixin( maker() );
}


void main()
{
     Coord c;
     alias A = toTuple!Coord;
     A a;
     a[0] = 1;
     a.x = 1;
}