On Thursday, 25 February 2016 at 20:53:12 UTC, Voitech wrote:
On Thursday, 25 February 2016 at 14:29:30 UTC, Nicholas Wilson wrote:
On Thursday, 25 February 2016 at 13:16:43 UTC, Voitech wrote:
[...]

You can (see std.meta/(std.traits?) , with recursive templates), but there is nothing stopping from using for/foreach in a template

this should do what you want
string[] functionSig;
string[] params;
foreach(s; Parameters!T)) // returns AliasSeq of types
 {
       params ~=s.stringof;
 }
  string[] pits;
foreach(p; ParameterIdentifierTuple!(T)); // returns AliasSeq of strings
{
           pits ~=p;
}
and the either join(er) or do as you see fit.
or use plain old for
for(auto i=0;i< pits.length; i++)
{
     functionSig ~= params[i];
     functionSig ~= pits[i];
}
writeln(functionSig);
// should print ["int" , "param0" , "string" , "param1"]

Nic

Thank You for answering, well i wanted to make all of this in template block, not using template functions (testing if it is possible), but i'm getting error when i try to create something like

template TupleToString(TList...){

    string a;
foreach(T;TList){ // Error: declaration expected, not 'foreach'
        a~=T.stringof;
    }
    enum string TupleToString=a;
}

Of course i can use template function, but wanted to know if can omit this.
Cheers Voitech

See the recursive templates in std.meta;

this would be something like

 template TupleToString(TList...)
{
       static if(Tlist.length == 0)
              enum string TupleToString = "";
       else
enum string TupleToString=TList[0].stringof ~ TupleToString(TList[1 . $];
 }

Nic

Reply via email to