C에서는 이름은 같지만 매개변수가 다른 함수(함수라고 함)를 가질 수 있습니다. 과부하. 이로 인해 오버로드된 함수를 std::for_each()와 같은 함수에 인수로 전달할 때 모호성이 발생할 수 있습니다.
문제:
다음 코드 조각을 고려하세요.
class A { void f(char c); void f(int i); void scan(const std::string& s) { std::for_each(s.begin(), s.end(), f); } };
이 예에서 scan() 메서드는 오버로드된 함수를 전달하려고 시도합니다. f()를 std::for_each()로 변환합니다. 그러나 컴파일러는 사용할 f()의 오버로드를 자동으로 결정할 수 없습니다.
해결책:
원하는 오버로드를 지정하려면 static_cast<>( ) 또는 mem_fun() 함수 포인터.
방법 1: Static_Cast<>()
// Uses the void f(char c); overload std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f)); // Uses the void f(int i); overload std::for_each(s.begin(), s.end(), static_cast<void (*)(int)>(&f));
함수 포인터를 특정 유형으로 캐스팅하면 컴파일러가 주어진 함수 서명을 기반으로 오버로드를 해결하도록 합니다.
방법 2: Mem_Fun()
f()가 멤버 함수의 경우 mem_fun() 함수 포인터를 사용할 수 있습니다.
std::for_each(s.begin(), s.end(), std::mem_fun(&A::f));
이 접근 방식을 사용하려면 클래스 이름과 오버로드를 지정해야 하며 이는 더 자세하면서도 유연할 수 있습니다.
위 내용은 std::for_each()에서 오버로드된 함수 모호성을 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!