我想将PointsList类的一个对象转换为另一个对象Points3DList(反之亦然),其中:
template <class T>
class PointsList
{
protected:
std::vector <Point <T> *> points; //Only illustration, not possible with templaes
};
和
template <class T>
class Points3DList
{
protected:
std::vector <Point3D<T> *> points; //Only illustration, not possible with templaes
};
在Point和Point3D之间没有关系(继承或组合)......
template <class T>
class Point
{
protected:
T x;
T y;
public:
Point( const T &x_, const T &y_ ) : x ( x_ ), y ( y_ ) {}
inline T getX() const {return x;}
inline T getY() const {return y;}
inline void setX ( const T &x_ ) {x = x_;}
inline void setY ( const T &y_ ) {y = y_;}
....
};
template <class T>
class Point3D
{
protected:
T x;
T y;
T z;
};
您如何看待转化
Points3DList <T> *pl3D = new Points3DList <T> ();
...
PointsList <T> *pl = reinterpret_cast < PointList <T> * > ( pl3D );
其中pl3D表示指向Points3DList对象的指针..在这种情况下可以使用reinterpret_cast,还是最好创建转换函数?在这种情况下,数据模型无法更改...
答案 0 :(得分:6)
此处的行为将完全未定义。不要这样做!
答案 1 :(得分:1)
您必须编写自己的强制转换函数(构造函数或朋友函数)。
类似的东西:
template <class T>
class PointsList
{
PointsList(Points3DList& p3d) : x(p3d->x), y(p3d->y) {};
...
并使用:
PointsList <T> *pl = new PointList( pl3D );
答案 2 :(得分:0)
PointsList <T> *pl = reinterpret_cast < PointList <T> * > ( pl3D );
这没有意义。非常错误。你只能从这种演员阵容中获得垃圾!
您如何期望reinterpret_cast
解释Point
和Point3D
以使投射成功?