0

C++/CLI でポインターからメンバーへのコンストラクトを実装するためのさまざまなオプションは何ですか?

X 座標と Y 座標に基づいていくつかのアクションを実行するいくつかの 2D ジオメトリ アルゴリズムを実装しました。X 軸用に 1 回、Y 軸用に 1 回、頻繁にコードを複製していることに気付きました。例として、各軸に沿った最大境界と最小境界を見つけます。

ネイティブ C++ を使用していた場合、X または Y メンバー (幅、高さなど) へのポインターを使用してパラメーターとして渡すことができたので、各アルゴリズムを 1 回だけ実装する必要がありました。しかし、C++/CLI では、これは不可能です。私のオプションは何ですか?効率的で軽量で簡潔なものを探しています。

4

2 に答える 2

1

代わりに、引数をテンプレート型の引数にし、プロパティ アクセスをカプセル化するファンクタを使用します。例えば:

ref class Point {
     property int X;
     property int Y;
};

struct Point_X_accessor
{
     static int get(Point^ p) { return p->X; }
     static int set(Point^ p, int value) { p->X = value; }
};

struct Point_Y_accessor
{
     static int get(Point^ p) { return p->Y; }
     static int set(Point^ p, int value) { p->Y = value; }
};

template <class PointAccessor>
int some_algorithm(Point^ p) { ... }

some_algorithm<Point_X_accessor>(p);
some_algorithm<Point_Y_accessor>(p);

もちろん、これは、すべてのボイラープレートを正当化するのに十分な長さのアルゴリズムが十分にある場合にのみ意味があります。ラッパーは、マクロを介して生成および参照することができますが、コード行をかなり削減できます。

于 2009-07-14T04:37:38.457 に答える