管理c ++和堆栈溢出都是新手,所以我希望我做得对。
我很难找到一种方法来编写一个带有基类参数的函数,该函数需要派生类的类变量。
我的基类叫做ImageBase,有两个类变量:int rows,cols;
public ref class ImageBase
{
public:
int num_rows;
int num_cols;
}
派生自一个名为ImageT的抽象模板类,它只包含一个模板化的二维数组,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等,如何从ImageBase类型访问变量“pix”?
答案 0 :(得分:0)
你做不到。至少不是没有技巧。
要解决此问题,我建议对printPixels()
函数进行模板化:
template<class T> void printPixels(ImageT<T>^ img)
如果你真的需要它,你可以添加一个printPixels(ImageBase^ img)
来检查img的类型,强制转换它,并为实际工作调用正确的printPixels(ImageT<T>^ img)
。