1

我想创建一个本机数组并访问它的托管代码。我不想将代码重写为不同的类型, ( int, long, float, double) 因此尝试使用泛型。

typedef int IND;

generic <typename T>
public ref class ntvarray
{
    void *pnt;
    IND sz;

public:
    ntvarray(IND length)
    {
        sz = sizeof(T);
        pnt =  ::operator new(length*sz);
    }

    ~ntvarray()
    {
        ::operator delete(pnt);
    }

    void* pointer()
    {
        return pnt;
    }

    T getitem (IND index)
    {
        //c3229
        return ((T*)pnt)[index];
    }

    void setitem (IND index, T value)
    {
        //c3229
        ((T*)pnt)[index] = value;
    }
};

我收到了错误,我知道这个错误的原因,

错误 C3229: 'T *': 不允许对泛型类型参数进行间接调用

但是有没有办法使用泛型来做到这一点?除了使用泛型之外,还有其他方法可以做到这一点吗?

4

1 回答 1

0

不,你不能使用泛型来做到这一点。但是你可以使用模板。这避免了您的问题所强调的代码重复,但不会像泛型那样允许运行时实例化。

于 2011-07-01T15:52:01.860 回答