0

托管 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”?

4

1 回答 1

0

你不能。至少不是没有技巧。

为了解决这个问题,我建议将printPixels()函数模板化:

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

如果你真的需要它,你可以添加一个printPixels(ImageBase^ img)检查 img 的类型、转换它并调用printPixels(ImageT<T>^ img)实际工作的权限。

于 2013-03-06T15:52:44.413 回答