плохо знакомый с управляемым 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?
Ты не можешь. По крайней мере, не без трюков.
Чтобы решить эту проблему, я бы порекомендовал printPixels()
функция:
template<class T> void printPixels(ImageT<T>^ img)
Если вам это действительно нужно, вы можете добавить printPixels(ImageBase^ img)
который проверяет тип img, бросает его и вызывает правильное printPixels(ImageT<T>^ img)
для реальной работы.
Других решений пока нет …