Родные типы и дженерики - PullRequest
1 голос
/ 01 июля 2011

Я хочу создать собственный массив и получить доступ к нему управляемого кода. Я не хочу переписывать код для разных типов (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 *': косвенные обращения к параметру универсального типа не допускаются

Однако есть ли способ сделать это, используя дженерики? Есть ли другой способ сделать это, может быть что-то еще, кроме использования дженериков?

1 Ответ

0 голосов
/ 01 июля 2011

Нет, вы не можете сделать это, используя дженерики. Но вы можете использовать шаблоны. Это позволяет избежать дублирования кода, которое подчеркивается в вашем вопросе, но не позволяет создавать экземпляры во время выполнения, как это делают дженерики.

...