왜이 템플릿 기능을 오버로드 할 수 없습니까?여기서 충돌이 어디 있습니까?
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;
}
내가 알 수있는 한, 두 함수는 동일한 인수 유형을 사용할 수 없습니다.
나는 언어가 * 어떤 * 템플릿 함수 .. – Mehrdad
@Mehrdad 과부하 수 있습니다 생각하지 않는다 : 당신은 오버로드 할 수있는 한편
, 당신은 템플릿 특수화와 같은 다른 기능을 쓸 수 있습니다. 특히 std.algorithm.find는 여러 번 오버로드됩니다. –@PeterAlexander : 잠깐만 요? 매번 템플릿 함수를 오버로드하려고 할 때마다 오류가 발생했습니다. – Mehrdad