0

クラス PointsList の 1 つのオブジェクトを別のオブジェクト 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 オブジェクトへのポインターを表します。この場合のデータモデルは変更できません...

4

3 に答える 3

6

ここでの動作は完全に未定義になります。それをしないでください!

于 2011-01-16T19:48:28.480 に答える
1

独自のキャスト関数 (コンストラクターまたはフレンド関数) を作成する必要があります。

何かのようなもの:

template <class T>
class PointsList
{
    PointsList(Points3DList& p3d) : x(p3d->x), y(p3d->y) {};
... 

そして使用:

PointsList <T> *pl = new PointList( pl3D );
于 2011-01-16T20:06:07.650 に答える
0
PointsList <T> *pl = reinterpret_cast < PointList <T> * > ( pl3D );

これは意味がありません。ひどく間違っています。そのようなキャストからゴミだけが得られます!

どのようreinterpret_castに解釈PointPoint3D、キャスティングを成功させることを期待していますか?

于 2011-01-16T19:49:49.750 に答える