2013-03-05 139 views
0

新的託管c + +和堆棧溢出,所以我希望我這樣做是正確的。從基類引用派生類參數

我很難找到一種方法來編寫一個基類參數,需要派生類的類變量的函數。

我的基類叫做ImageBase,它有兩個類變量:int rows,cols;

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

從派生是一個抽象,模板類稱爲ImageT僅包含模板化2-d陣列,PIX:

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」分別浮動,縮短或複雜。下面是類結構的一個小MS畫圖圖,如果這是比較容易理解:

Class Hierarchy

我的問題是:如果我寫的是一個非常一般的功能:

void printPixels(ImageBase^ img) 

所以我可以將它傳遞給RealImage,ComplexImage等,我如何從ImageBase類型訪問變量「pix」?

回答

0

你不行。至少不是沒有竅門。

爲了解決這個問題,我會建議模板化的printPixels()功能:

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

如果你真的需要它,你可以添加一個printPixels(ImageBase^ img),檢查IMG的類型,蒙上它,並調用合適的printPixels(ImageT<T>^ img)爲真正的工作。

+0

試圖混淆dynamic_casts後,我終於成功檢查了img的類型,然後進行普通投射。 (t == Image :: typeid) \t \t Image^newImage =(Image ^)img; 感謝您的回覆。 – Sooji 2013-03-07 16:11:15