digitalmars.D.learn - Distinguish recursive Templates
- Manfred Nowak (14/14) May 22 2015 How can one determine the recursion depth for templated types?
- Matt Kline (4/18) May 22 2015 Why should the last line write SetSet? (It doesn't.) toString
- Manfred Nowak (4/5) May 22 2015 Correct. I do not know how to use `T' to determine the recursion depth o...
- Timon Gehr (18/23) May 22 2015 import std.stdio, std.range, std.algorithm;
- Manfred Nowak (3/7) May 22 2015 Thx. Seems that I have to relearn a lot.
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
}
May 22 2015
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.
May 22 2015
Matt Kline wrote:isn't making any use of the template argument TCorrect. I do not know how to use `T' to determine the recursion depth of the template---and I want no further parameter. -manfred
May 22 2015
On 05/23/2015 12:12 AM, Manfred Nowak wrote:Matt Kline wrote: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 }isn't making any use of the template argument TCorrect. I do not know how to use `T' to determine the recursion depth of the template---and I want no further parameter. -manfred
May 22 2015
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
May 22 2015








Manfred Nowak <svv1999 hotmail.com>