0

次のような一般的な点と四角形のクラスがあります。

template < typename T > struct Pt
  { T x; T y; };

template < typename T > struct Rect
  { T x; T y; T w; T h; };

2 つの を受け取りRect、重複するかどうかをテストする関数があります。これを実装するには、「Pt within Rect」関数を 4 回呼び出します。しかし、rect に格納されているデータの種類を知らずにポイントを作成する方法を知りたいです。私は次のようなことを望んでいました:

bool RectsOverlap ( Rect a, Rect b )
  {
  Pt /*do i put sonethig here?*/ p = Pt(a.x, a.y);
  ...
  p = Pt(a.x + a.w, a.y);
  ...
  }

またはその趣旨の何か。

4

2 に答える 2

3

関数をテンプレートにすることができます:

template <typename T>
bool RectsOverlap (const Rect<T>& a, const Rect<T>& b )
{
  Pt<T> p(a.x, a.y);
  ...
  p = Pt<T>(a.x + a.w, a.y);
  ...
 }

Rectsそれらをコピーしたり変更したりする必要がないように見えるため、 const 参照によって渡されることに注意してください。

于 2013-07-03T04:27:09.480 に答える
0
template <typename T>
bool rectsOverlap(const Rect<T>& a, const Rect<T>& b)
{
    Pt<T> p( ... , ... );
    ...
    return ...;
}
于 2013-07-03T04:28:12.013 に答える