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

mat_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

mat_traits

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

namespace boost
{
    namespace qvm
    {
        template <class M>
        struct mat_traits
        {
            /*main template members unspecified*/
        };
        
        /*
        User-defined (possibly partial) specializations:
        
        template <>
        struct mat_traits<M>
        {
            static int const rows = /*user-defined*/;        
            static int const cols = /*user-defined*/;        
            typedef /*user-defined*/ scalar_type;        
        
            template <int R,int C> static inline scalar_type read_element( Matrix const & m );        
            template <int R,int C> static inline scalar_type & write_element( Matrix & m );        
        
            static inline scalar_type read_element_idx( int r, int c, Matrix const & m );        
            static inline scalar_type & write_element_idx( int r, int c, Matrix & m );        
        };
        */
    }
}

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

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

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

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

Кроме того, действующие специализацииmat_traitsшаблон может определять следующие функции доступа в качестве статических элементов, гдеmявляется объектом типаМатрица,RиCявляются целочисленными константами времени компиляции, аrиcявляются переменными типаint:

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

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

#include <boost/qvm/mat_traits.hpp>
struct float33 { float a[3][3]; };
namespace boost
{
    namespace qvm
    {
        template <>
        struct mat_traits<float33>
        {
            static int const rows=3;
            static int const cols=3;
            typedef float scalar_type;
            template <int R,int C> static inline scalar_type & write_element( float33 & m ) { return m.a[R][C]; }
            template <int R,int C> static inline scalar_type read_element( float33 const & m ) { return m.a[R][C]; }
            static inline scalar_type & write_element_idx( int r, int c, float33 & m ) { return m.a[r][c]; }
            static inline scalar_type read_element_idx( int r, int c, float33 const & m ) { return m.a[r][c]; }
        };
    }
}

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:26:30/0.0085799694061279/1