quat_traits
#include <boost/qvm/quat_traits.hpp>[ORIG_END] -->
namespace
boost
{
namespace
qvm
{
template <class Q>
struct quat_traits
{
/*main template members unspecified*/
};
/*
User-defined (possibly partial) specializations:
template <>
struct quat_traits<Q>
{
typedef /*user-defined*/ scalar_type;
template <int I> static inline scalar_type read_element( Quaternion const & q );
template <int I> static inline scalar_type & write_element( Quaternion & q );
};
*/
}
}
quat_traitsшаблон должен быть специализирован для (определяемых пользователем) типов кватернионов, чтобы обеспечить возможность операций кватернионов, определенных в заголовках Boost QVM для объектов этих типов.
Примечание: типы кватернионов не требуются для копирования.
Главнаяquat_traitsне уточняется. Для определения следующих членов требуются действительные специализации:
- scalar_type: выражениеquat_traits:Scalar_typeдолжен быть типом значения, который удовлетворяет скалярным требованиям..
Кроме того, действующие специализацииquat_traitsшаблон должен определять по меньшей мере одну из следующих функций доступа в качестве статических членов, гдеqявляется объектом типа Quaternion, аIявляется целочисленной константой времени компиляции:
Примечание:Для кватернионаa + bi + cj + dkэлементы предполагаются в следующем порядке:a,b,c,d; то естьI=0/1/2/3имели бы доступa/b/c/d.
Незаконно называть любую из вышеперечисленных функций, еслине является_quat::value'истинно. Даже тогда кватернионным типам разрешается определять только подмножество функций доступа.
Ниже приведен пример определяемого пользователем типа кватерниона и его соответствующей специализации шаблонаquat_traits: