0

我有一个通用的点和矩形类,如下所示:

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

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

我有一个接受两个Rects 并测试它们是否重叠的函数。我想通过四次调用我的“Pt within 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 回答