从基类引用派生类参数

时间:2013-03-05 18:54:12

标签: c++ templates polymorphism abstract managed-c++

管理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图:

Class Hierarchy

我的问题是:如果我要编写一个非常通用的函数,如:

void printPixels(ImageBase^ img)

所以我可以传递一个RealImage,ComplexImage等,如何从ImageBase类型访问变量“pix”?

1 个答案:

答案 0 :(得分:0)

你做不到。至少不是没有技巧。

要解决此问题,我建议对printPixels()函数进行模板化:

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

如果你真的需要它,你可以添加一个printPixels(ImageBase^ img)来检查img的类型,强制转换它,并为实际工作调用正确的printPixels(ImageT<T>^ img)