에 함수 템플릿에 전달할 때 나는 다음과 같은 코드가 있습니다 baz
에 통과 할 때 제대로 foo
작품과부하 해상도가 다른 함수
template<typename T>
void bar(int x, T y)
{
}
void baz(int x, int y)
{
}
template<typename T0, typename T1>
void foo(void k(T0, T1), T1 t)
{
}
int main()
{
foo(baz, 10); // OK
foo(bar, 10); // ERROR
return 0;
}
과부하 해상도를. 그러나 함수 템플릿 bar
을 전달할 때 컴파일러는 bar
이 하나만 있더라도 T0
이 foo
인 것으로 추론 할 수 없으며 첫 번째 인수는 int
으로 완전히 확인됩니다. foo(bar, 10)
과 같은 호출을 컴파일러가 해결할 수 있도록 함수 템플릿 foo
을 작성하려면 어떻게해야합니까?
예, 내 현재의 예는 비 추론 될 이유에 대한 이유를 이해합니다. 제 질문은 함수 템플릿'foo'를 다시 쓰는 방법 이었습니까? 즉, 호출 사이트가 아닌 함수 정의 사이트에서 컴파일러를 제공하여 도움이 될 수 있도록 도와 줄 수 있습니까? 인수로서의 함수 템플릿은 전례가 없습니다. 예를 들어'std :: endl'은 함수 템플릿입니다. – keveman
@keveman "_ 예를 들어, std :: endl은 함수 템플릿입니다."그러나'basic_ostream :: operator <<'는 아닙니다! – curiousguy