Я пытаюсь отправить функцию D sort
в качестве аргумента шаблона функции pipe
.Когда я использую sort
без аргументов шаблона, это работает:
import std.stdio,std.algorithm,std.functional;
void main()
{
auto arr=pipe!(sort)([1,3,2]);
writeln(arr);
}
Однако, когда я пытаюсь использовать sort
с аргументом шаблона:
import std.stdio,std.algorithm,std.functional;
void main()
{
auto arr=pipe!(sort!"b<a")([1,3,2]);
writeln(arr);
}
, я получаю ошибку -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)
Почему это происходит?sort!"b<a"
работает сам по себе и имеет те же аргументы и возвращаемые типы, что и sort
, так почему pipe
принимает sort
, но не sort!"b<a"
?И есть ли правильный синтаксис для того, что я пытаюсь сделать?
ОБНОВЛЕНИЕ
ОК, я пытался обернуть функцию sort
.Работает следующий код:
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);
}
Так почему же не работает оригинальная версия?это из-за дополнительных параметров шаблона sort
занимает?