2011-01-27 73 views
3

我一直在將一些數學類轉換爲模板並使用初始化列表,並在繼承的類需要在初始化時訪問基類數據成員時遇到問題。C++繼承的模板類和初始化列表

下面是代碼:

template <typename T> 
struct xCoord2 
{ 
    T x; 
    T y; 

    xCoord2(T _x, T _y) : x(_x), y(_y) {}; 
}; 

template <typename T> 
struct xCoord3 : xCoord2<T> 
{ 
    typedef xCoord2<T> B; 

    T z; 

    // All Error 
    xCoord3(T _x, T _y, T _z) : x(_x), y(_y), z(_z) {}; 
    xCoord3(T _x, T _y, T _z) : B::x(_x), B::y(_y), z(_z) {}; 
    xCoord3(T _x, T _y, T _z) : this->x(_x), this->y(_y), z(_z) {}; 

    // Works 
    xCoord3(T _x, T _y, T _z) { B::x = 0; B::y = 0; z = 0; }; 
}; 

是否有可能在繼承類使用初始化列表?

+1

'xCoord3`真的是'xCoord2`嗎?或者他們只是分享某些數據成員?如果兩個類之間不存在is-a關係,則繼承可能不是一個好主意。 – 2011-01-27 18:12:47

回答

7

您需要調用基類的構造函數:

xCoord3(T _x, T _y, T _z) : xCoord2(_x, _y), z(_z) { } 

這將是沒有什麼不同,如果這些人非模板類:只能初始化在派生類的構造函數派生類的基類和成員變量。