2013-12-10 104 views
0

假設我有一個類:C++模板和分配

template <typename T, int N> 
class FixedNum 
{ 
    public: 
     FixedNum& operator+= (const FixedNum& n); 
}; 

我想定義一個operator+=可以接受FixedNum<T, N2>,其中N2可能不等於N。我該怎麼做?我對模板感到困惑,GCC認爲的原型不適用於我所做的任何類

+1

FixedNum 和FixedNum 是不同的類型。你需要一個輔助類來接受兩種不同的類型。 –

+0

模板變量'N'是一個'int'。它可以採用任何'int'值。最後它的類型是'int'。 – HAL

回答

3
template <typename T, int N> 
class FixedNum 
{ 
public: 

    template <int N2> 
    FixedNum& operator+= (const FixedNum<T,N2>& n); 
}; 

template<typename T, int N> 
template<int N2> 
FixedNum<T,N> & FixedNum<T,N>::operator+= (const FixedNum<T,N2>& n) 
{ 
    ... 
    return(*this); 
} 

注意,這不能改變N;如果你想改變N,那麼你正在使用錯誤的方法。

4

你必須使它成爲一個模板:

template <int N2> 
FixedNum& operator+= (const FixedNum<T, N2>& n); 
+0

下面是如何實施該方法: '模板 FixedNum &FixedNum ::運算+ =(常量FixedNum &克){...}' GCC仍然顯示錯誤。 –

+1

您需要兩個級別的模板:一個用於班級,另一個用於操作員。例如'template template FixedNum &FixedNum :: operator + =(const FixedNum &n){...} – juanchopanza