Function Template for Dynamic Parameter

Timoses timosesu at gmail.com
Sun Jul 1 12:46:30 UTC 2018


On Sunday, 1 July 2018 at 11:58:30 UTC, vino.B wrote:
> On Sunday, 1 July 2018 at 11:52:19 UTC, Alex wrote:
> NewType.d(19): Error: function declaration without return type. 
> (Note that constructors are always named this)
>
> [...]
>
> auto coCleanFiles(T ...)(T args) {
> 	auto dFiles = Array!(Tuple!(string, SysTime))(dirEntries(FFs, 
> SpanMode.shallow).filter!(a => a.isFile).map!(a => 
> tuple(a.name, a.timeLastModified)));
> 	return dFiles;
> }
>
> void ptManagecoRoutine(T)(T function(T ...)(T args), 
> Array!string Dirlst) {
>     alias scRType = typeof(coRoutine(args.init));
>     auto PFresult = taskPool.workerLocalStorage!scRType;
>     ReturnType!coRoutine rData;
>     foreach (string FFs; Dirlst[]) { PFresult.get ~= 
> coRoutine(FFs.strip); }
>     foreach(i; PFresult.toRange) { rData ~= i[][]; }
>     if (!rData[].empty) { rData[].sort!((a,b) => a[1] < 
> b[1]).each!(e => writefln!"%-83s %.20s"(e[0], e[1].to!string)); 
> }
> }
>  void main () {
>  Array!string CleanDirlst;
>  CleanDirlst.insertBack("C:\\Temp\\BACKUP1");
>  ptManagecoRoutine(&coCleanFiles, CleanDirlst);
>  }


auto coCleanFiles(T ...)(T args)
{ ... }

void ptManagecoRoutine(T)(T fun, Array!string DirList)
{
     foreach (dir; DirList)
         fun(dir);
}

or

  void ptManagecoRoutine2(alias func)(Array!string DirList)
        if (is (typeof(func!(typeof(DirList[0]))) == function))
  {
      alias t = typeof(DirList[0]);
      ptManagecoRoutine(&func!t, DirList);
  }

callable via

Array!string CleanDirlst;
ptManagecoRoutine(&coCleanFiles!string, CleanDirlst);
ptManagecoRoutine2!coCleanFiles(CleanDirlst);



More information about the Digitalmars-d-learn mailing list