Sto tentando di inviare la funzione D sort
come argomento modello alla funzione pipe
. Quando uso sort
senza argomenti template funziona: Invio di una funzione basata su modello come argomento a una funzione basata su modelli in D
import std.stdio,std.algorithm,std.functional;
void main()
{
auto arr=pipe!(sort)([1,3,2]);
writeln(arr);
}
Tuttavia, quando si tenta di utilizzare sort
con un argomento modello:
import std.stdio,std.algorithm,std.functional;
void main()
{
auto arr=pipe!(sort!"b<a")([1,3,2]);
writeln(arr);
}
ottengo un errore - main.d(5): Error: template instance sort!("b<a") sort!("b<a") does not match template declaration sort(alias less = "a < b",SwapStrategy ss = SwapStrategy.unstable,Range)
Perché succede? sort!"b<a"
funziona autonomamente e ha gli stessi argomenti e tipi di ritorno di sort
, quindi perché pipe
accetta sort
ma non sort!"b<a"
? E c'è una sintassi corretta per ciò che cerco di fare?
UPDATE
OK, ho cercato di avvolgere la funzione sort
. Il seguente codice funziona:
import std.stdio,std.algorithm,std.functional,std.array;
template mysort(string comparer)
{
auto mysort(T)(T source)
{
sort!comparer(source);
return source;
}
}
void main()
{
auto arr=pipe!(mysort!"b<a")([1,3,2]);
writeln(arr);
}
Allora, perché non fa il lavoro originale di versione? questo è dovuto ai parametri di modello aggiuntivi sort
?
vedo ... ho pensato che il modello 'pipe', che implicitamente ottenere è il tipo di l'argomento come un parametro di template, che dovrebbe passare il parametro per la prima funzione in filodiffusione, ma vedo che non è il caso. –
@IdanArye: 'pipe' non può mai farlo, perché si potrebbe separarlo dall'argomento (' alias pipe! (F) pipeed 'e poi molte righe dopo' piped ([1,2,3]); ') – kennytm
Non dovrebbe 'alias'ing che rende' piped' una funzione basata su un modello stesso? –