Re: Distinguish recursive Templates

2015-05-22 Thread Manfred Nowak via Digitalmars-d-learn
Timon Gehr wrote:

 template getDepth(T){
  static if(is(T==Set!S,S)) enum getDepth=1+getDepth!S;
  else enum getDepth=0;
 }

Thx. Seems that I have to relearn a lot.

-manfred


Re: Distinguish recursive Templates

2015-05-22 Thread Manfred Nowak via Digitalmars-d-learn
Matt Kline wrote:

 isn't making any use of the template argument T

Correct. I do not know how to use `T' to determine the recursion depth of 
the template---and I want no further parameter.

-manfred 


Re: Distinguish recursive Templates

2015-05-22 Thread Timon Gehr via Digitalmars-d-learn

On 05/23/2015 12:12 AM, Manfred Nowak wrote:

Matt Kline wrote:


isn't making any use of the template argument T


Correct. I do not know how to use `T' to determine the recursion depth of
the template---and I want no further parameter.

-manfred



import std.stdio, std.range, std.algorithm;

template getDepth(T){
static if(is(T==Set!S,S)) enum getDepth=1+getDepth!S;
else enum getDepth=0;
}
class Set(T){
override string toString(){
enum r=Set.repeat.take(getDepth!Set).join;
return r;
}
}
void main(){
auto s0=new Set!uint;
writeln(s0); // writes Set
auto s1=new Set!(Set!uint);
writeln(s1); // writes SetSet
}



Distinguish recursive Templates

2015-05-22 Thread Manfred Nowak via Digitalmars-d-learn
How can one determine the recursion depth for templated types?

Example code:

import std.stdio;
class Set(T){
  override string toString(){
return Set;
  }
}
void main(){
  auto s0= new Set!uint;
  writeln( s0); // writes Set

  auto s1= new Set!(Set!uint);
  writeln( s1); // should write SetSet
}


Re: Distinguish recursive Templates

2015-05-22 Thread Matt Kline via Digitalmars-d-learn

On Friday, 22 May 2015 at 21:13:50 UTC, Manfred Nowak wrote:

How can one determine the recursion depth for templated types?

Example code:

import std.stdio;
class Set(T){
  override string toString(){
return Set;
  }
}
void main(){
  auto s0= new Set!uint;
  writeln( s0); // writes Set

  auto s1= new Set!(Set!uint);
  writeln( s1); // should write SetSet
}


Why should the last line write SetSet? (It doesn't.) toString 
isn't making any use of the template argument T, so no recursion 
occurs.