基于另一个模板对象创建模板对象

时间:2013-07-03 04:20:59

标签: c++ templates

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

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

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

我有一个函数接受两个Rect并测试它们是否重叠。我想通过四次调用我的“Pt in Rect”函数来实现它。但我想知道如何在不知道存储在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);
  ...
  }

或者那种效果。

2 个答案:

答案 0 :(得分: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引用传递,因为您似乎不需要复制它们或修改它们。

答案 1 :(得分:0)

template <typename T>
bool rectsOverlap(const Rect<T>& a, const Rect<T>& b)
{
    Pt<T> p( ... , ... );
    ...
    return ...;
}