Understanding alias template parameters
    Salih Dincer 
    salihdb at hotmail.com
       
    Thu Apr 21 23:02:00 UTC 2022
    
    
  
On Thursday, 21 April 2022 at 21:38:14 UTC, Ali Çehreli wrote:
> ```d
> auto myMap(alias f, R)(R r) {
>   pragma(msg, typeof(f));
>     return MapResult!(R, f)(r);
> }
> ```
It looks delicious when the convenience function works magic with 
Voldemort:
```d
import std.range,  std.stdio;
auto myMap(alias f, R)(R r) {
   struct Map {
     auto empty() {
       return r.empty;
     }
     auto front() {
       return f(r.front);
     }
     void popFront() {
       r.popFront;
     }
   }
   return Map();
}
void main() {
   // with convenience function:
   alias func = (int x) =>  2 * x;
   auto range = 1.iota(11);
   range.myMap!func.writeln;
   range.myMap!(x => 2 * x).writeln;
   // with only struct:
   struct MapResult(alias range, alias f) {
     auto empty() { return range.empty; }
     auto front() { return f(range.front); }
     void popFront() { range.popFront; }
   }
   MapResult!(range, func) mp;
   foreach(result; mp) result.writeln;
} /* OUTPUT:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
2
4
6
8
10
12
14
16
18
20
*/
```
SDB at 79
    
    
More information about the Digitalmars-d-learn
mailing list