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

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

Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: C headers (mixed C/C++)  (Прочитано 21069 раз)
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #45 : Январь 26, 2013, 09:59 »

А вообще уверяю Вас что после первого, даже скромного, инженерного расчета Ваш энтузиазм к private и геттерам/сеттерам резко упадет, возможно до нуля  Улыбающийся

Я занимаюсь расчётами..  достаточно серьёзными (производительность приоритетна). Никаких проблем с сетерами и гетерами не испытывал..  Подмигивающий
Записан

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #46 : Январь 26, 2013, 10:19 »

Весь пользовательский код будет работать с объектами DrawBuffer_cpp, а про DrawBufferRec будет знать только прослойка.
Ну это понятно, но как в DrawBuffer_cpp должны быть представлены члены которые в DrawBufferRec были С-структурами (RGB_Float, C_Matrix, C_Rect)?

Я несколько раз писал, что по моему мнению так делать нельзя. Как правило получается не удобная фигня.
Нужно сесть и представить (с точки зрения пользовательского кода), а как бы мне было удобно эффективно это все описать на C++.
Я понимаю о чем Вы говорите, но в данном случае мне просто нужны ++ эквиваленты примитивных структур (RGB_Float, C_Matrix, C_Rect) - и ничего более 
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #47 : Январь 26, 2013, 10:25 »

... но в данном случае мне просто нужны ++ эквиваленты примитивных структур (RGB_Float, C_Matrix, C_Rect) - и ничего более 
Я всё никак понять не могу, а какой в этом тогда смысл?

Записан

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

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

Сообщений: 2094



Просмотр профиля
« Ответ #48 : Январь 26, 2013, 11:09 »

... но в данном случае мне просто нужны ++ эквиваленты примитивных структур (RGB_Float, C_Matrix, C_Rect) - и ничего более 
Я всё никак понять не могу, а какой в этом тогда смысл?



Если только ради дополнительных функций..
1) написать все необходимые функции для сишных примитивов.. (в отдельном хедере)
2)
Записан

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #49 : Январь 26, 2013, 11:21 »

Если только ради дополнительных функций..
1) написать все необходимые функции для сишных примитивов.. (в отдельном хедере)
Все-таки прочли тему Улыбающийся  Конечно можно и так, минус что свои аналогичные плюсовые структуры есть (без них не проживешь), поэтому возникают многочисленные приведения.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #50 : Январь 26, 2013, 11:28 »

Я понимаю о чем Вы говорите, но в данном случае мне просто нужны ++ эквиваленты примитивных структур (RGB_Float, C_Matrix, C_Rect) - и ничего более 

Код
C++ (Qt)
extern "C"
{
typedef struct matrix matrix_type;
void matrix_rotate_x( matrix_type *m, real a );
void matrix_scale( matrix_type *m, real s );
}
 
class Matrix
{
public:
   void rotate_x( real a );
   void scale( real s );
 
private:
   matrix_type m_matrix;
 
// а лучше
// class priv;
// priv    *d;
};
 
// ---
 
void Matrix::rotate_x( real a )
{
   matrix_rotate_x( &m_matrix, a );
}
 
void Matrix::scale( real s )
{
   matrix_scale( &m_matrix, s );
}
 

С одной стороны (пользовательский код) виден только интерфейс Matrix, с другой стороны все реализуется через С-функции.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #51 : Январь 26, 2013, 11:30 »

Все-таки прочли тему Улыбающийся  Конечно можно и так, минус что свои аналогичные плюсовые структуры есть (без них не проживешь), поэтому возникают многочисленные приведения.
Все приведения (если и будут) только в интерфейсном слое (Matrix).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #52 : Январь 27, 2013, 12:39 »

Все приведения (если и будут) только в интерфейсном слое (Matrix).
Я согласен со всем что Вы говорите - но все-таки из Ваших слов не понимаю как же нужно делать  Улыбающийся Получив вызов API я имею на входе большую С структуру - ну привел или создал ++ структуру, ясно. Но как же мне в этой ++ структуре иметь удобный доступ к ++ под-структурам (сpp_RGB_Float, cpp_Matrix, cpp_Rect)? Я предложил оформить аксессоры - нет. Тогда как?

Ладно, не буду больше настаивать, тема уже слишком велика, в принципе обсуждение было полезным. Спасибо
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #53 : Январь 27, 2013, 22:42 »

Тогда как?
Возвращать такие объекты  (Point, Rect, Matrix) только по значению (с техникой implicitly shared это будет не накладно) или константной ссылке. И соответственно, нужны полноценные сеттеры.
Записан
Страниц: 1 2 3 [4]   Вверх
  Печать  
 
Перейти в:  


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