球と三角形の間の交差テストの実装に取り組んでいます。
これを行う関数を設計したいと思います。関数は、との両方に対して関数sphere_triangle_intersection_test( ... )
として宣言する必要があります。これにより、プライベート メンバーにアクセスできるようになります。(したがって、またはメソッドへの関数呼び出しがないため、より効率的である可能性があります。friend
class sphere
class triangle
get()
set()
この関数は各ループでかなり頻繁に呼び出されるため、inline
関数にするのがよいでしょう。
ただし、inline
関数は、少なくとも私の理解では、クラス宣言と同じファイルに表示 (定義) する必要があります。
クラスごとに 1 つのヘッダーの形式を使用しているため、これを回避する方法はありますか?
1つの可能性は次のとおりだと思います。
- が存在するファイル
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__
次に、ファイルを 1 つだけ含めます。少し整理できますか? これで、クラス ファイルの末尾にある #include を忘れても問題ありません。