我想创建一个本机数组并访问它的托管代码。我不想将代码重写为不同的类型,(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 *'
:不允许对泛型类型参数进行间接
然而,有没有一种方法可以使用泛型来做到这一点?除了使用泛型之外,还有其他方法可以做到这一点吗?
不,不能使用泛型来实现这一点。但是你可以使用模板。这避免了您的问题所强调的代码重复,但不会像泛型那样允许运行时实例化。