我正在努力实现球体和三角形之间的相交测试。
我想设计一个功能来做到这一点。该函数sphere_triangle_intersection_test( ... )
应该被声明为friend
两个class sphere
和的函数class triangle
,因为这允许访问私有成员。(因此可能更有效,因为没有函数调用get()
或set()
方法。
该函数将在每个循环中被调用很多次,因此将其设为inline
函数会很好。
但是,inline
至少在我的理解中,函数必须与类声明出现(定义)在同一个文件中。
由于我使用的是每类一个标题的格式,有没有办法解决这个问题?
我想一种可能性是:
sphere.hpp
为class sphere
要驻留的文件创建一个文件。triangle.hpp
为class triangle
要驻留的文件创建一个文件。- 在两个类中声明为
friend inline [return type]
执行交叉测试的函数。 - 创建一个
collisiontest.impl
包含函数定义的文件inline
以执行测试。 #include "sphere.hpp"
在triangle.hpp
.- 在结尾处
triangle.hpp
,`#include "collisiontest.impl"。
虽然看起来有点狡猾......很容易忘记它collisiontest.impl
包含在文件的底部......
有没有人对我如何改变/改进我在这里得到的东西有任何建议?
编辑
我突然想到我可以创建另一个文件,shapes_INCLUDE_ME.hpp
其内容如下:
// shapes_INCLUDE_ME.hpp
#ifndef __shapes__include__me__hpp__
#define __shapes__include__me__hpp__ // not necessary, but good practice
#include "sphere.hpp"
#include "triangle.hpp"
#include "collisiontest.impl"
#endif // __shapes__include__me__hpp__
然后你会只包含一个文件,可能会整理一下吗?现在没有忘记类文件末尾的#include 的问题。