2011-01-27 96 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) { } 

这将是没有什么不同,如果这些人非模板类:只能初始化在派生类的构造函数派生类的基类和成员变量。