我正在編寫一個與XNA一起工作的庫。我有一個基本類的基類,我打算從中創建Planes,Cubes和其他原始類型。理想情況下,我希望我的基類執行渲染,而不管使用的頂點類型如何。在泛型基類中使用DrawUserIndexedPrimitives <>
相關代碼:
public abstract class Primitive<VT> where VT : IVertexType
{
private void Draw(GraphicsDevice graphics)
{
graphics.DrawUserIndexedPrimitives<VT>(primitiveType_,
vertices_,
0,
vertices_.Length,
indices_,
0,
primitiveCount_);
}
}
現在,其他類不是源於此,使用適當的頂點類型:
public abstract class Plane<VT> : Primitive<VT> where VT : IVertextTpye { ... }
public class PlaneColored : Primitive<VertexPositionColor> { .... }
public class PlaneTextured : Primitive<VertexPositionTexture> { .... }
的問題是,我得到了DrawUserIndexPrimitives <編譯錯誤>電話:
Error 1 The type 'VT' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'Microsoft.Xna.Framework.Graphics.GraphicsDevice.DrawUserIndexedPrimitives<T>(Microsoft.Xna.Framework.Graphics.PrimitiveType, T[], int, int, short[], int, int)' C:\dev\Projects\2010\XNAParts\XNAParts\Parts\Primitive.cs 88
而且我不能將構造更改爲struct
否則DrawUserIndexPrimitives的泛型參數將不起作用(因爲它不是結構體)。
有沒有解決這個辦法嗎?
在此先感謝!
一個很好的問題,但標題並沒有描述空值約束的真正問題 –