2013-07-27 1 views
3

Visual Studio 2012에서 함수 템플릿을 특정 형식으로 제한하는 방법이 있습니까?Visual Studio 2012의 함수 템플릿 형식 제한

이것은 GCC에서 작동하지만 MSVC는 error C4519: default template arguments are only allowed on a class template을 생성합니다.

#include <type_traits> 

template <class float_t, class = typename std::enable_if< std::is_floating_point<float_t>::value >::type> 
inline float_t floor(float_t x) 
{ 
    float_t result; 
    //... 
    return result; 
} 

크로스 컴파일러 솔루션은 최선을 다 할 것이다. 어떤 대안?

답변

3

일반적으로는 사용하기위한 방법 enable_if

template <class float_t> 
typename std::enable_if< std::is_floating_point<float_t>::value, float_t>::type 
    floor(float_x x) {...} 

로 이것을 작성합니다.

+4

나는 그것이 enable_if가 사용되는 방법이나 그것이 일반적으로 사용되는 방법이라고 말하지 않을 것입니다. 이것은 함수에서 기본 템플릿 매개 변수에 대한 VS2012의 지원 부족을 우회하는 것입니다. – Rapptz

+1

@Rapptz : 이것이 원래 의도 된 enable_if의 사용 방법이었습니다. 기본 함수 템플리트 매개 변수는 새로운 것이고 enable_if와 관련됩니다. – Puppy

+1

@DeadMG 동의하지 않겠습니다. 그러나 C++ 11 이후부터는 일반적으로 템플릿 매개 변수에 배치됩니다. 어쨌든, 컴파일러가이 기능을 지원하지 않으면 완벽한 해결 방법입니다. – Rapptz