0

マネージ C++ とスタック オーバーフローの両方が初めてなので、これを正しく行っていることを願っています。

派生クラスのクラス変数を必要とする基本クラス パラメーターを持つ関数を記述する方法を見つけるのに苦労しています。

私の基本クラスは ImageBase と呼ばれ、2 つのクラス変数があります。

public ref class ImageBase
{
    public:
        int num_rows;
        int num_cols; 
}

そこから派生したのは、テンプレート化された 2 次元配列 pix のみを含む、ImageT と呼ばれる抽象化されたテンプレート化されたクラスです。

template<class T> public ref class ImageT abstract : public ImageBase
{
public:
    property T** pix
    {
        public: T** get() { return rows; }
        protected: void set(T** val) { rows = val; }
    }
}

ImageT から派生したものは、RealImage、ShortImage、ComplexImage で、テンプレート タイプ「T」をそれぞれ float、short、complex に変更するだけです。これが理解しやすい場合、クラス構造の小さなMS Paintダイアグラムを次に示します。

クラス階層

私の質問は、次のような非常に一般的な関数を書く場合:

void printPixels(ImageBase^ img)

RealImage、ComplexImageなどを渡すことができるように、ImageBaseタイプから変数「pix」にどのようにアクセスしますか?

4

1 に答える 1

0

それはいけません。少なくともトリックがないわけではありません。

これを解決するには、printPixels()関数をテンプレート化することをお勧めします。

template<class T> void printPixels(ImageT<T>^ img)

本当に必要な場合はprintPixels(ImageBase^ img)、img のタイプをチェックし、キャストしprintPixels(ImageT<T>^ img)、実際の作業の権限を呼び出す a を追加できます。

于 2013-03-06T15:52:44.413 に答える