なぜこのテンプレート関数をオーバーロードできないのですか?ここで競合はどこですか?
import std.stdio;
T[] find(T, E)(T[] haystack, E needle)
if (is(typeof(haystack[0] != needle)))
{
while(haystack.length > 0 && haystack[0] != needle) {
haystack = haystack[1 .. $];
}
return haystack;
}
// main.d(14): Error: function main.find conflicts with template main.find(T,E) if (is(typeof(haystack[0] != needle))) at main.d(5)
double[] find(double[] haystack, string needle) { return haystack; }
int main(string[] argv)
{
double[] a = [1,2.0,3];
writeln(find(a, 2.0));
writeln(find(a, "2"));
return 0;
}
私が知る限り、2つの関数は同じ引数型を受け入れることはできません。
私は – Mehrdad
@Mehrdad ..言語はあなたが*任意の*テンプレート関数をオーバーロードすることができますとは思わない:あなたがオーバーロードすることができます。特にstd.algorithm.findは何度もオーバーロードされます。 –
@PeterAlexander:本当に待ちますか?ああ、ええ、あなたは非テンプレート関数とテンプレート関数をオーバーロードすることはできません:私は、通常の関数「過負荷」テンプレート1を作るために試みたたびに、私はエラー.... – Mehrdad