2011-06-29 16 views
2

私はグラフィカルアプリケーションを扱うたびに、過去に書いた、またはネット上に見つかったアルゴリズムを、概念的には完璧に収まるが、データとは違うアルゴリズムを適用する必要があることがわかった構造。たとえば、Vector2PointFPointなどと表現されることがあります。このようなコードを別のプロジェクトで再利用すると、時には望ましくない参照を追加することがあり、常に退屈な変換をデータ型から行うため、新しいデータ構造のためにalgoを書き換えます。ですから、疑問:Pointアクセサを抽象化する(スマート)方法はありますか?私はのタプルのようなものを提供することだと思う:マルチポイント構造のアルゴリズム

Func<TCoord,TPoint> Xaccessor 
Func<TCoord,TPoint> Yaccessor 
... 
Func<TCoord,TPoint> ...accessor 

を私は座標値を設定するために同じことをしなければならないので、私は誰どちらは私が私のアルゴリズムの実装を使用したくない、そのような混乱で終わります。ポイント座標アクセサをどのくらい簡潔に指定しますか?また、フロート[]によってポイントが表現されることもあることを考慮しなければなりません。私は表現木を使って何かを行うことができると思うが、私はそれに敏感ではないので、どんなアドバイスも本当に感謝するだろう!ポイントのクラスは、私が書いていないので おかげインタフェースを実装する多く

EDITは、オプションではありません、そして反射は、パフォーマンス上の理由のためのオプションではありません。

+0

+1あなたの悩みは+1ですが、私はかなり確信しています良い解決策。 –

+0

@Konrad Rudolph、このような場合、浮動小数点型のようにSystem内にこれらの構造体を持たせるのはうれしくないでしょうか?つまり、Point2d/3dベクトルと行列は常に利用可能なクラスとして... –

答えて

0

多分このような何か?

interface ICoordinate<T> { T GetX(int idx); T GetY(int idx); } 

class PointRepresentation : ICoordinate<T> { 
    PointTypeArrayOrWhatever a; 
    T GetX(int idx) { return a.GetX; } 
} 

class MyAlgorithm { 
    ICoordinate accessor; 
    void Compute() { 
     // do something with accessor.GetX(); 
    } 
} 

または私はあなたを誤読しましたか?私は実際にあなたのXaccessorのものを手に入れません... これはおそらくアルゴリズムが遅くなることを覚えておく必要があります..

+0

私が探しているものではありません。これは、ポイントのクラスラッパーを作成することを強制することを意味します... –

+0

おそらく? *遅いですよね? – sehe

+0

structがインターフェイスを実装できるようにクラスラッパーは必要ありません。構造体の値にアクセスするだけで、構造体が本当に不変の場合、これはうまくいくはずです。私はCLRがインターフェイスメソッドを仮想として見ていると思うので、パフォーマンスは若干低下します。 –

関連する問題