我有一个通用的点和矩形类如下:
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);
...
}
或者那种效果。
答案 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 ...;
}