std::min
, std::max
의 C++ 11 가변 버전에 대한 구현이 반영되어야합니다. 여기 std::max
그냥 std::max
와 std::min
를 대체하여 유사하게 구현 std::min
내 두 가지 대안은 다음과 같습니다C++ Variadic 템플릿 반영 표준 버전 : min() 및 std :: max()
/*! Multi-Type Minimum of \p a. */
template <LessThanComparable T> const T & multi_type_min (const T & a) { return a; } // template termination
/*! Multi-Type Minimum of \p a and \p args. */
template <class T, class ... R >
//requires SameType <T , Args >...
T multi_type_min(const T & a, const R &... b)
{
return std::min(a, multi_type_min(b...));
}
/*! Minimum of \p a. */
template <LessThanComparable T> const T & common_type_min(const T & a) { return a; } // template termination
/*! Minimum of \p a and \p args. */
template <class T, class ... R, class C = typename boost::common_type<T, R...>::type >
C common_type_min(const T & a, const R &... b)
{
return std::min(static_cast<C>(a), static_cast<C>(common_type_min(b...)));
}
우리가 전혀 common_type_min
을 필요로하는 경우 핵심 문제은? 이것은 하나의 인수로 min()을 호출 할 수 있음에 유의하십시오. 이것이 혼란이나 문제를 일으킬 수 있습니까?
2 개의 매개 변수를 얻을 때까지 반복 할 수 없습니까? 1 매개 변수를 구체적으로 중지 할 필요는 없습니다. –
나는 그걸 어떻게하는 지 알아. 나는'std :: tuple'과 같은 컨테이너 래퍼의 알고리즘 * 일반성을 위해서'min'과'max'가 하나의 매개 변수를 취하는 것이 더 나은지 궁금했습니다. –
단일 값의 최소값은 의미가 없지만 1 요소 튜플의 최소값은 의미가 있다고 말합니다. 컨테이너 타입에'min()'을 과부하하는 것이 더 나을 것입니다. –