다음 작업을 수행하는 더 좋은 방법이 있습니까?템플릿 유형과 상수 값 비교
나는 다음과 같은 기능을, 벡터 클래스가 :
template <typename T>
bool Vector3<T>::IsUnitVector() const
{
return IsAlmostEqual(this->GetLength(), One<T>::Value());
}
T는 플로트 또는 더블 (I은 이러한 유형이 지원됩니다 확인하기 위해 명시 적 템플릿 인스턴스화를 사용하고), 내가했습니다 될 수 올바른 유형에서 1의 값을 반환하는 도우미 클래스를 생성했다 : 나는 다른 비교뿐만 아니라 Zero
클래스를 만들 필요가 실현 될 때까지
template <typename T>
struct One
{
static T Value();
};
template <>
struct One<int>
{
static int Value() { return 1; }
};
template <>
struct One<float>
{
static float Value() { return 1.0f; }
};
template <>
struct One<double>
{
static double Value() { return 1.0; }
};
이 너무 나쁘지 않았다. 그래서 제 질문은, 이것을 달성하는 더 좋은 방법이 있습니까?
나는 이것이 매우 일반적이라고 생각합니다. 'One'의 비 특화 버전에서'return 1; '이라고 말하려고 했습니까? 나는 암묵적인 변환 덕분에 그렇게 할 것이라고 생각한다. –
leemes
IsAlmostEqual이 템플릿 화 되었기 때문에 컴파일러는 사용할 형식을 알지 못합니다 (int는 float, double 등으로 변환 될 수 있기 때문에). –