On Thursday, 5 July 2018 at 16:23:36 UTC, vino.B wrote:
Hi All,

  Request your help on the below code

auto coCleanFiles(T ...) (T FFs) {
auto dFiles = Array!(Tuple!(string, SysTime))(dirEntries(FFs, SpanMode.depth).map!(a => tuple(a.name, a.timeCreated)));
        return dFiles;
}

void process(T)(T pfunction, Array!string Dirlst) {
alias wlsType = typeof(pfunction(T));
auto Result = taskPool.workerLocalStorage!wlsType();
foreach (FFs; parallel(Dirlst[],1)) { Result.get ~= pfunction(FFs); }
foreach(i; Result.toRange) { writeln(i[][]); }
}

void main() {
Array!string Cleanlst;
Cleanlst.insert("C:\\Temp\\BACKUP1");
process(&coCleanFiles, Cleanlst);
}

Error : Error: coCleanFiles(T...)(T FFs) is not an lvalue and cannot be modified

I guess since in above code `coCleanFiles` is a template, you can not simply take the address of that function template. You'd have to instantiate the template first

    process(&coCleanFiles!string, ...)

If you want to pass the template to process you could define process as something like

    void process(alias func)(Array!string Dirlst)
    {
        func!string(Dirlst[0]);
    }

and call

    process!coCleanFiles(Cleanlst);

Reply via email to