2013-03-05 5 views
0

новый как для управляемого C++, так и для переполнения стека, поэтому я надеюсь, что я сделаю это правильно.Ссылка на параметр производного класса из базового класса

Мне сложно найти способ написать функцию с параметром базового класса, для которой требуется переменная класса производного класса.

Мой базовый класс называется ImageBase и имеет две переменные класса: int rows, cols;

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

производный от этого является абстрактным, шаблонный класс называется ImageT, что только содержит шаблонный 2-D массив, пикс:

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, которые просто изменить тип шаблона «Т» для плавающего, короткого или сложного соответственно. Вот немного MS Paint диаграмма структуры класса, если это легче понять:

Class Hierarchy

Мой вопрос: если бы я писал очень общую функцию, как:

void printPixels(ImageBase^ img) 

так что я могу передать ему RealImage, ComplexImage и т. д., как мне получить доступ к переменной «pix» из типа ImageBase?

ответ

0

Вы не можете. По крайней мере, не без трюков.

Чтобы решить эту проблему, я бы рекомендовал templatize в printPixels() функции:

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

Если вам действительно нужно, вы можете добавить printPixels(ImageBase^ img), который проверяет тип IMG, бросает его, и называет право printPixels(ImageT<T>^ img) для настоящей работы.

+0

После попытки столкнуться с dynamic_casts я, наконец, просто успел проверить тип img, а затем сделать обычный актерский состав. EX: Тип^t = img-> GetType() if (t == Изображение :: typeid) \t \t Изображение^newImage = (изображение ^) img; Спасибо за ответ. – Sooji

Смежные вопросы