를 사용하는 경우 유형을 추론하는 데 실패, 내가하는 방법과 같이 작성된 클래스에 대한 과부하가 :컴파일러 그래서 표준 : 기능
bool my_for_each(someIterator begin, someIterator end, bool (*_lambda)(someIterator));
void my_for_each(someIterator begin, someIterator end, void (*_lambda)(someIterator));
당신이 볼 수 있듯이을, 유일한 차이점은의 서명입니다 전달 된 함수, 즉 반환 유형입니다. 내가 그것을 호출 할 때 위의 코드는 완벽하게 정상적으로 작동하지만 : 나는 my_for_each 함수를 작성하는 경우
가my_for_each(iteratorBegin, iteratorEnd, [](someIterator) {; }); // calls void version
my_for_each(iteratorBegin, iteratorEnd, [](someIterator)->bool {return false; }); // calls bool version
..., 다음과 같이
bool my_for_each(someIterator begin, someIterator end, std::function<bool(someIterator)> _lambda);
void my_for_each(someIterator begin, someIterator end, std::function<void(someIterator)> _lambda);
코드는 내가 함수를 호출하는 경우 컴파일에 실패를 같은 방법 (오버로드 된 함수에 대한 C2668 모호한 호출). 비록 내가 수동으로 함수를 캐스팅했다면 :
my_for_each(iteratorBegin, iteratorEnd, static_cast<std::function<void(someIterator)>>([](someIterator) {; })); //calls void version
my_for_each(iteratorBegin, iteratorEnd, static_cast<std::function<bool(someIterator)>>([](someIterator) -> bool { return false; })); //calls bool version
코드는 완벽하게 작동합니다. 그래서 궁금해 할 것 :
- 표준 함수 포인터 유형 공제가 표준 템플릿보다 "강"한 이유는 무엇입니까?
- 매개 변수를 수동으로 캐스팅하지 않고보다 일반적인 버전을 계속 사용할 수있는 해결 방법이 있습니까?
컴파일러는 VS2015입니다.
감사합니다. 좋은 하루 되세요!
FrançoisAndrieux 고정 @, 단지 전사 오류 – Alfaix
은'my_for_each' 함수의 반환 값의 의미는 무엇입니까? –
범위를 형성하는 두 개의 반복자 인 것처럼 보입니다. 반복기를 받아들이고 그것에 무언가를하는 함수입니다. 나는 두 번째 버전 (아마도 and, or 또는 operation 중 하나 일 것임)에있는 모든 'bool'을 가지고 무엇이 완료되고 있는지 확신하지 못한다. –