이 경우 어떤 함수 템플리트 오버로드를 사용해야합니까?명시 적으로 어떤 템플릿 오버로드를 사용해야하는지 선택하십시오.
struct X { };
struct A { A(X){} };
struct B { B(X){} };
template<class T>
void fun(T, A) { }
template<class T>
void fun(T, B) { }
int main() {
/* explicitly choose overload */ fun(1, X());
}
오류 : 정상적인 기능을 위해
error: call of overloaded 'fun(int, X)' is ambiguous
/* explicitly choose overload */ fun(1, X());
^
candidate: void fun(T, A) [with T = int]
void fun(T, A) { }
^~~
candidate: void fun(T, B) [with T = int]
void fun(T, B) { }
^~~
그것은 다음과 같습니다 가능
void fun(A){}
void fun(B){}
int main() {
((void(*)(A))(fun))(X());
}
인가? 명시 적으로 첫 번째 매개 변수 유형을 지정하지 않도록 선택하지만 여전히 (C에서 + 당신이 목적을 주조 전용 람다 함께 갈 수있는 초를 지정하려면
친절하게 질문을 설명하십시오. – Weaboo
'fun (1, A (X()));'??? – Pubby
@Pubby 함수 형식을 변경하지 않고 함수 오버로드 (일반 함수의 경우 캐스팅 형식과 같은)를 선택했습니다. – xinaiz