Я написал матричный шаблонный класс C ++. Он параметризован своими размерами и типом данных:
template<int NRows, int NCols, typename T>
struct Mat {
typedef Mat<NRows, NCols, T> MyType;
typedef T value_type;
typedef const T *const_iterator;
typedef T *iterator;
enum { NumRows = NRows };
enum { NumCols = NCols };
T m_data[NRows * NCols];
// ... Lot's of operations and functions ...
// Some overloads
typedef Mat<2, 1, int> Vec2i;
typedef Mat<2, 1, float> Vec2f;
typedef Mat<3, 1, float> Vec3f;
typedef Mat<4, 1, unsigned char> Vec4ub;
typedef Mat<4, 4, float> Mat44f;
typedef Vec3f Vector;
typedef Vec4ub Color;
typedef Vec2f LonLat;
Это фантастический маленький класс, который обрабатывает много векторной арифметики и линейной алгебры. Кроме того, он может легко взаимодействовать как с кодом низкого уровня (OpenGL), так и кодом высокого уровня (фильтры ПИД и Калмана).
Мне кажется, что его дизайн звучит правдоподобно, но вопрос не в этом. У этого класса есть один ужасный недостаток: это ужас для использования в отладчике .
Поскольку это структура, которая содержит массив, всегда существует один раздражающий уровень косвенности при рассмотрении переменных в XCode (и я предполагаю, что в VisualStudio). Это еще более усугубляется тем фактом, что XCode иногда не в состоянии правильно следовать цепочкам указателей, и я не могу проверить значения вообще. Это происходит, если у меня есть, скажем, vector
этих объектов.
Я понимаю, что мог бы настроить отладчик так, чтобы он как-то работал с моим шрифтом. Но мне было интересно, если есть, возможно,
другой способ хранения данных моей матрицы, чтобы она имела лучшую «отлаживаемость» ?
Это скорее вопрос типа «используй свое воображение», чем вопрос о создании наилучшей практики. Мне просто любопытно, какие альтернативные макеты классов можно использовать при сохранении общего характера кода.