有沒有更好的方法來完成以下工作?將模板類型與常數值比較
我有一個載體類,具有以下功能:
template <typename T>
bool Vector3<T>::IsUnitVector() const
{
return IsAlmostEqual(this->GetLength(), One<T>::Value());
}
由於T可以是浮動或雙(我使用顯式模板實例化,以確保只有這些類型的支持),我已經必須創建一個輔助類,它返回值1,在正確的類型:
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; }
};
這是不是太糟糕,直到我意識到我需要創建一個Zero
類以及其他的比較。所以我的問題是,有沒有更好的方法來實現這一目標?
我覺得這很常見。你是否試圖在「One」的非專業版本中說'return 1;'?我認爲這會通過隱式轉換來實現。 –
leemes
我做了,但因爲IsAlmostEqual是模板化的,所以編譯器不知道要使用哪種類型(因爲int可以轉換爲float,double等)。 –