고려중인 가능한 방법을 제거하기 위해 enable_if 문을 사용하고 있습니다.코드 제거에 enable_if가 사용되는 방법
#include "gmpxx.h"
#include <iostream>
template <typename T>
struct is_ring_field {
};
template <>
struct is_ring_field<int> {
static const bool value = false;
};
template <>
struct is_ring_field<mpq_class> {
static const bool value = true;
};
template<typename T>
std::enable_if<is_ring_field<T>::value,int> RankMat(T const& Input)
{
return 10;
}
template<typename T>
std::enable_if<(not is_ring_field<T>::value),int> RankMat(T const& Input)
{
return 20;
}
int main()
{
int M1=10;
mpq_class M2=3;
std::cerr << "FICT rank(M1)=" << RankMat(M1) << "\n";
std::cerr << "FICT rank(M2)=" << RankMat(M2) << "\n";
}
최종 목표는 입력시 대수 데이터 유형에 따라 달라지는 메소드를 갖는 것입니다. 다른 특성을 위해 그것은 나를 위해 일했지만이 것은 아닙니다. 이 경우 컴파일러에서 이상하게 호출이 모호하다고 말합니다. 즉 std :: enable_if이 실패했습니다.
RankMat에 대한 두 가지 오버로드를 살펴보십시오. 과부하의 어떤 부분이 다른가요? 그 부분이 유효한 과부하와 다른 함수의 유일한 부분 일 수 있습니까? – NathanOliver
'typename std :: enable_if <*,*> :: type'을 잊지 않으셨습니까? –
예, 메시지를 작성한 후 알았습니다. 죄송합니다. clang ++ 및 g ++의 메시지는 도움이되지 않았습니다. –