Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

vec_traits

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

QVM: Quaternions, Vectors, Matrices

vec_traits

#include <boost/qvm/vec_traits.hpp>[ORIG_END] -->

namespace
boost
{
    namespace
    qvm
    {
        template <class V>
        struct vec_traits
        {
            /*main template members unspecified*/
        };
        
        /*
        User-defined (possibly partial) specializations:
        
        template <>
        struct vec_traits<V>
        {
            static int const dim = /*user-defined*/;        
            typedef /*user-defined*/ scalar_type;        
        
            template <int I> static inline scalar_type read_element( Vector const & v );        
            template <int I> static inline scalar_type & write_element( Vector & v );        
        
            static inline scalar_type read_element_idx( int i, Vector const & v );        
            static inline scalar_type & write_element_idx( int i, Vector & v );        
        };
        */
    }
}

Шаблонvec_traitsдолжен быть специализирован для (определяемых пользователем) типов векторов, чтобы включить векторные и матричные операции, определенные в заголовках Boost QVM для объектов этих типов.

Примечание: типы векторов не требуются для копирования.

Основныеvec_traitsчлены шаблона не указаны. Для определения следующих членов требуются действительные специализации:

  • дим: Выражениеvec_traits<Вектор>::тусклыйнеобходимо оценить до целочисленной константы времени компиляции, превышающей 0, которая определяет размер вектора.
  • scalar_type: выражениеvec_traits::scalar_typeдолжно быть типом значений, удовлетворяющимскалярным требованиям.

Кроме того, действующие специализацииvec_traitsшаблон может определять следующие функции доступа в качестве статических членов, гдеvявляется объектом типаВектор,Iявляется целочисленной константой времени компиляции, аiявляется переменной типаint:

Незаконно называть любую из вышеперечисленных функций, еслине является_vec::значениеявляетсяистинным. Векторные типы могут определять только подмножество функций доступа. Общими требованиями являются:

Ниже приведен пример определяемого пользователем 3D-векторного типа и соответствующей ему специализации шаблонаvec_traits:

#include <boost/qvm/vec_traits.hpp>
struct float3 { float a[3]; };
namespace boost
{
    namespace qvm
    {
        template <>
        struct vec_traits<float3>
        {
            static int const dim=3;
            typedef float scalar_type;
            template <int I> static inline scalar_type & write_element( float3 & v ) { return v.a[I]; }
            template <int I> static inline scalar_type read_element( float3 const & v ) { return v.a[I]; }
            static inline scalar_type & write_element_idx( int i, float3 & v ) { return v.a[i]; } //optional
            static inline scalar_type read_element_idx( int i, float3 const & v ) { return v.a[i]; } //optional
        };
    }
}

Статья vec_traits раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 05:36:36/0.0037479400634766/0