c++ - 基于另一个模板对象创建模板对象

标签 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 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/

相关文章:

c++ - 类型转换到另一个具有命名空间的类?

C++ 偏特化匹配引用类型

html - html 模板中的内容被模板的文件位置而不是所需的文本替换

c++ - 偏序可变参数模板函数 clang

java - 使用 java 程序生成源代码(COBOL)

c++ - 我可以使用类型特征从 C++ 中的枚举值推断出枚举的类型吗?

c++ - 用 memcpy 填充标准字符串不会设置长度

c++ - 尝试显示时 vector 中没有值

c++ - constexpr c 字符串连接,在 constexpr 上下文中使用的参数

c++ - 在 C++03 中将指针模板和指向成员函数的指针作为模板参数