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_typeread_element( Matrix const & m ); template <int R,int C> static inline scalar_type & write_element( Matrix & m ); static inline scalar_typeread_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, которая определяет число столбцов в матрице.
Кроме того, действующие специализацииmat_traitsшаблон может определять следующие функции доступа в качестве статических элементов, гдеmявляется объектом типаМатрица,RиCявляются целочисленными константами времени компиляции, аrиcявляются переменными типаint:
читать элемент: выражениеmat_traits::read_element(m)возвращает либо копию, либо ссылку на элемент в строкеRи столбцеCm.
напишите_элемент: выражениеmat_traits::write_element(m)возвращает изменчивую ссылку на элемент в строкеRи столбцеCm.
Незаконно называть любую из вышеперечисленных функций, еслине является_mat::valueявляетсяистинной. Даже в этом случае типы матриц могут определять только подмножество функций доступа. Общими требованиями являются:
Статья mat_traits раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.