我想知道是否可以用C#创建通用指针。该问题与Pointers of generic type?十分相似,但是我看不到有任何方法可以使任何解决方案在我的情况下起作用。尽管Why is pointer to generic types not allowed?尽管不能解释为什么将泛型类型限制为值类型还不够,但也无济于事,因为这里不需要为每种可能的类型创建重载。
因此,问题的设置基本上是存在一些通用函数,需要将void*
强制转换为特定类型的指针,示例函数如下:
public static unsafe T[] fooBar<T>(void* ptr, int length) where T : struct
{
T* typedPointer = (T*) ptr; // This does not appear to be possible in this form
T[] retVal = new T[length];
for (int i = 0; i < length; i++) {
T[i] = *typedPointer;
++typedPointer;
}
return retVal;
}
此处必须使用指针的原因是由于调用了一些非托管代码以及C风格的导出,该代码返回了System.Reflection.Pointer
,然后通过{{变成了void*
} 1}}。
如上所述,是否有任何方法可以将Pointer.Unbox()
强制转换为void*
,还是无法使用泛型类型指针?