C ++: Возможность встроенной функции, друга для нескольких классов?

Я работаю над реализацией теста на пересечение сферы и треугольника.

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]