Это просто способ разделить реализацию и объявление на отдельные файлы. Файл .hpp
объявляет vec3
, затем #include
файл .inl
(если не была запрошена не встроенная версия). Легко пропустить #include
, как в конце .hpp
, но он есть. Несмотря на утверждение, что файлы не связаны, они связаны, хотя и в противоположном направлении, чем ожидалось.
(Предположительно, если определено GLM_EXTERNAL_TEMPLATE
, определение vec3::operator=
будет предоставлено в отдельном компоненте, а не в виде встроенной функции.)
Еще один аспект, который стоит отметить, заключается в том, что эти файлы находятся в каталоге, называемом «detail». Это соглашение, согласно которому эти файлы могут быть изменены без предварительного уведомления. В частности, они могут не существовать в более старых версиях. (Они также могут отсутствовать в более новых версиях, но это скорее академический вопрос, когда вы смотрите на новейшую версию.)
Таким образом, общая картина такова, что вы #include
один из обычных заголовочных файлов, который гарантирует, что и type_vec3.hpp
, и type_vec3.inl
имеют #include
d в этом порядке. Это помещает встроенное определение в каждую единицу перевода, которая имеет объявление vec3
.