템플릿 함수에 템플릿 매개 변수로 std::max
함수를 전달하려고하지만 컴파일러가 함수 유형을 추론 할 수없는 오류를 인쇄합니다. 간단한 예제가 동일한 문제를 재현합니다. 그것은 자신의 max2
기능을 작동하지만 STL std::max
작동하지 않습니다 here와 같이std :: max 함수 포인터를 저장할 자동 변수
#include <algorithm>
template <class T>
T max2(const T& a, const T& b) { return std::max(a, b); }
int main() {
#if 1
auto f = max2<float>;
#else
// error: unable to deduce ‘auto’ from ‘max<float>’
auto f = std::max<float>;
#endif
float max_val = f(1.0f, 2.0f);
return 0;
}
문제는 [여러'표준 : :가 max']이다 (http://en.cppreference.com/w/cpp/algorithm/max)와 컴파일러는 알고하지 않는 한 당신을 필요. –
필자는 (비 템플릿) 클래스를 생성하고 템플릿 함수 호출 연산자 (아마도 다른 시그니처가 하나 이상인)를 제공하고 그 클래스의 객체를 전달하는 템플릿 함수의 스타일을 개인적으로 선호합니다. 그런 다음 템플릿 매개 변수를 지정하지 않아도됩니다. 'max '대신에'max'를 넘겨 줄 수 있습니다. 또는 더 나쁜 경우, 여러 가지 자유 함수 오버로드가있을 때 불필요한 정적 캐스트가 필요합니다. [range-v3] (https://github.com/ericniebler/range-v3) 라이브러리는 모든 기능에 대해이 작업을 수행합니다. –