XNAでのベクターグラフィックス管理を簡素化しようとしています。現在、州の保存を組み込むことによって。目標は、Xの描画状態のみを保持するために、2X行のプッシュ/プルコードを記述しないようにすることです。
これを行うには、クライアントに、描画を通じて保持したいクラス/構造体の参照を提供してもらいます。
また、多くの初心者プログラマーがこれを使用するため、ラムダ式やその他の高度なC#機能をクライアントコードで強制的に使用することはお勧めできません。
Daniel EarwickerのPtrクラスを使用して、目標を達成しようとしました。
public class Ptr<T>
{
Func<T> getter;
Action<T> setter;
public Ptr(Func<T> g, Action<T> s)
{
getter = g;
setter = s;
}
public T Deref
{
get { return getter(); }
set { setter(value); }
}
}
拡張メソッド:
//doesn't work for structs since this is just syntatic sugar
public static Ptr<T> GetPtr <T> (this T obj) {
return new Ptr<T>( ()=> obj, v=> obj=v );
}
およびプッシュ機能:
//returns a Pop Action for later calling
public static Action Push <T> (ref T structure) where T: struct
{
T pushedValue = structure; //copies the struct data
Ptr<T> p = structure.GetPtr();
return new Action( ()=> {p.Deref = pushedValue;} );
}
ただし、これはコードに記載されているようには機能しません。
どうすれば目標を達成できますか?