我有一个通用的点和矩形类如下:
template < typename T > struct Pt
{ T x; T y; };
template < typename T > struct Rect
{ T x; T y; T w; T h; };
我有一个函数接受两个 Rect
并测试它们是否重叠。我想通过四次调用我的“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);
...
}
或者类似的东西。
最佳答案
你可以让你的函数成为一个模板:
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);
...
}
请注意,Rect
是通过 const 引用传递的,因为您似乎不需要复制或修改它们。
关于c++ - 基于另一个模板对象创建模板对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17439609/