Ссылка на параметр производного класса из базового класса

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

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

Мой базовый класс называется ImageBase и имеет две переменные класса: int row, 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» на float, short или complex соответственно. Вот небольшая диаграмма MS Paint структуры класса, если это легче понять:

Классовая иерархия

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

void printPixels(ImageBase^ img)

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

0

Решение

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]