Я работаю над реализацией теста на пересечение сферы и треугольника.
Я хочу разработать функцию для этого. Функция 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 в конце файла класса.
Задача ещё не решена.
Других решений пока нет …