이 반복자의 값을 비교하기 위해 두 개의 반복자와 사용자 지정 비교기를 사용하는 함수가 필요합니다. 나는 이것을 위해 추가적인 템플릿 인자를 사용하고 싶지 않다.어떻게 제대로 다른 템플릿 함수에 비교자를 전달하십시오.
template<typename T>
void foo(T begin, T end,
function<bool(decltype(*begin), decltype(*begin))> compare = less<decltype(*begin)>())
{
// I want to use 'compare' as: "compare(*begin, *begin);"
}
이 코드는 그 소리에 의해 일반적으로 컴파일되었지만, GCC 5.4.0에 나는 약간의 오류가있어 : 나는이 방법으로 그것을 구현 한이 코드를 수정하는 방법
binary_heap.cpp:10:79: error: local variable 'begin' may not appear in this context
function<bool(decltype(*begin), decltype(*begin))> compare = less<decltype(*begin)>())
^
binary_heap.cpp:10:85: error: template argument 1 is invalid
function<bool(decltype(*begin), decltype(*begin))> compare = less<decltype(*begin)>())
을 그래서 그것은 clang과 GCC에서 성공적으로 컴파일 될 수 있습니까? 아니면 그러한 기능을 정의하기에 더 적합한 솔루션이 있습니까?
왜이 경우에 추가 템플릿 인수를 사용하지 않으시겠습니까? – Yakk