Russian Qt Forum
Ноябрь 24, 2024, 15:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как описать матрицу из различных типов  (Прочитано 11952 раз)
sibmail
Гость
« : Апрель 04, 2012, 07:41 »

ПОдскажите как описать матрицу из различных типов. если например матрица будет фиксированная или динамическая, состоящая из int, QString, QByteArray и т.д.
Записан
Dovgon
Гость
« Ответ #1 : Апрель 04, 2012, 07:56 »

используй QVarian
Записан
Bepec
Гость
« Ответ #2 : Апрель 04, 2012, 07:56 »

QVariant используй. Ну или отрекись от разных типов в пользу структур Подмигивающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 04, 2012, 12:24 »

Код
C++ (Qt)
template <class T>
struct CMatrixDynamic {
CMatrixDynamic( int row, int col );
...
T * mData;
};
 
template <class T, int kRow, int kCol>
struct CMatrixStatic {
...
T mData[kRow][kCol];
};
 
Записан
mutineer
Гость
« Ответ #4 : Апрель 04, 2012, 12:31 »

Igors, как это поможет хранить разные типы в одном контейнере?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Апрель 04, 2012, 12:44 »

Igors, как это поможет хранить разные типы в одном контейнере?
Никак, но зачем делать "матрицу" элементы которой имеют разный тип? Вероятно человек спросил как делать общую матрицу для разных типов. Иначе он бы сказал "контейнер"
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #6 : Апрель 04, 2012, 12:52 »

Один фиг, всегда можно сделать вот так:
Код
C++ (Qt)
Matrix<QVariant, N, M> matrix;
 
Подмигивающий
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Апрель 04, 2012, 12:59 »

Один фиг, всегда можно сделать вот так:
Код
C++ (Qt)
Matrix<QVariant, N, M> matrix;
 
Подмигивающий
А как уложить static/dynamic в одну template конструкцию? Или это лишено смысла?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #8 : Апрель 04, 2012, 13:01 »

Цитировать
А как уложить static/dynamic в одну template конструкцию? Или это лишено смысла?
Не понял.. В смысле?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Апрель 04, 2012, 13:14 »

Цитировать
А как уложить static/dynamic в одну template конструкцию? Или это лишено смысла?
Не понял.. В смысле?
Пример
Код
C++ (Qt)
void CStaticMatrix<T>::Transpose( void );
void CDynamicMatrix<T>::Transpose( void );
 
Transpose меняет строки со столбцами, этот код совершенно одинаков для статического и динамического вариантов. Обобщаем или как?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #10 : Апрель 04, 2012, 13:23 »

Так не надо делать transpose методом класса, тем более который подменяет изначальную матрицу на другую..

Или сделать так, чтоб transpose возвращала новую транспонированную матрицу. Конечно, если делать так в лоб, это будет не очень оптимально, но если подумать)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
V1KT0P
Гость
« Ответ #11 : Апрель 04, 2012, 13:28 »

Igors, как это поможет хранить разные типы в одном контейнере?
Никак, но зачем делать "матрицу" элементы которой имеют разный тип? Вероятно человек спросил как делать общую матрицу для разных типов. Иначе он бы сказал "контейнер"
По-моему автор неправильно выразился. И сделать матрицу который имеют разный тип не проблема. Для этого надо привести указатель типа к обычному int и получаем матрицу указателей. Ну а при вытаскивании динамик каст используем, либо если в матрице хранить идентификатор типа то и статик каст пойдет.
Записан
mutineer
Гость
« Ответ #12 : Апрель 04, 2012, 13:31 »

По-моему автор неправильно выразился. И сделать матрицу который имеют разный тип не проблема. Для этого надо привести указатель типа к обычному int и получаем матрицу указателей. Ну а при вытаскивании динамик каст используем, либо если в матрице хранить идентификатор типа то и статик каст пойдет.

А почему к "обычному" int? Почему не к "обычному" QPushButton, например?Улыбающийся
и сколько кастов надо сделать, прежде чем понять что же за тип такой вытащился?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #13 : Апрель 04, 2012, 13:32 »

Igors, как это поможет хранить разные типы в одном контейнере?
Никак, но зачем делать "матрицу" элементы которой имеют разный тип? Вероятно человек спросил как делать общую матрицу для разных типов. Иначе он бы сказал "контейнер"
По-моему автор неправильно выразился. И сделать матрицу который имеют разный тип не проблема. Для этого надо привести указатель типа к обычному int и получаем матрицу указателей. Ну а при вытаскивании динамик каст используем, либо если в матрице хранить идентификатор типа то и статик каст пойдет.
Я бы не рискнул хранить в матрице указатели (если она динамически может меняться)..

И на самом деле, почему int?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
V1KT0P
Гость
« Ответ #14 : Апрель 04, 2012, 13:36 »

Igors, как это поможет хранить разные типы в одном контейнере?
Никак, но зачем делать "матрицу" элементы которой имеют разный тип? Вероятно человек спросил как делать общую матрицу для разных типов. Иначе он бы сказал "контейнер"
По-моему автор неправильно выразился. И сделать матрицу который имеют разный тип не проблема. Для этого надо привести указатель типа к обычному int и получаем матрицу указателей. Ну а при вытаскивании динамик каст используем, либо если в матрице хранить идентификатор типа то и статик каст пойдет.
Я бы не рискнул хранить в матрице указатели (если она динамически может меняться)..

И на самом деле, почему int?
Размер указателя равен intу =). Если добавить еще одну матрицу в которой хранится идентификатор типа, то хватит одного статик каста для привидения к нужному типу =).
Надо подождать пока автор уточнит что он хочет. А то может он хочет сделать игру и все объекты на карте хранить в матрице, тогда ему нужен базовый класс, а остальные наследовать от него. И тогда будет матрица базового класса.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.