2013-03-05 5 views
0

관리되는 C++ 및 스택 오버플로가 모두 새롭기 때문에이 작업을 올바르게 수행하고 싶습니다.기본 클래스에서 파생 클래스 매개 변수를 참조하는

파생 클래스의 클래스 변수가 필요한 기본 클래스 매개 변수를 사용하여 함수를 작성하는 방법을 찾는 데 어려움을 겪고 있습니다.

내 기본 클래스는 ImageBase라고하며 두 개의 클래스 변수가 있습니다. int rows, cols; 그 유래

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

만 템플릿 2-D 어레이 PIX 포함 추상, 템플릿 클래스라는 ImageT이다 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; } 
    } 
} 

가 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) 

당신이 정말로 필요한 경우, IMG의 종류를 확인하여 캐스트 printPixels(ImageBase^ img)을 추가 할 수 있습니다를, 오른쪽 printPixels(ImageT<T>^ img)를 호출 진짜 일을 위해서.

+0

dynamic_casts를 엉망으로 만든 후에 마침내 img의 유형을 확인한 다음 일반 캐스트를 수행하는 데 성공했습니다. EX : 유형^t = img-> GetType() if (t == Image :: typeid) \t \t 이미지^newImage = (이미지 ^) img; 응답 해 주셔서 감사합니다. – Sooji

관련 문제