- 1
w = (GtkWidget*)(*((int*)(lw->data)));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+137.6
w = (GtkWidget*)(*((int*)(lw->data)));
Объект для медитаций
guest 13.02.2010 15:46 # −3
:D
Nagg 13.02.2010 17:05 # 0
guest 27.02.2010 04:20 # 0
xaionaro 27.02.2010 19:28 # −1
guest 13.02.2010 17:15 # −2
smac 14.02.2010 14:28 # +1
guest 14.02.2010 14:47 # +1
smac 14.02.2010 14:52 # 0
guest 14.02.2010 14:56 # 0
smac 14.02.2010 15:08 # 0
Не для того чтобы задеть, а ради того чтобы научиться, вопрос:
как в данном случае правильно преобразовать данные, хранящиеся в ячейке на которую указывает элемент структуры data, к указателю на GtkWidget?
mutanabbi 14.02.2010 16:21 # −1
Если жизненно необходимо преобразование типов, то использовать явные преобразования в стиле C++ (если говорим о нем). В любом случае тут должно быть приведение к указателю на указатель судя по контексту. А уж static_cast или reinterpret_cast это будет - зависит от типа поля data. Что-то в духе
w = *static_cast<GtkWidget**>(lw->data);
smac 14.02.2010 16:59 # 0
mutanabbi 14.02.2010 17:02 # +2
w = *(GtkWidget**)(lw->data);
Преобразование к инту не нужно. Кастовать указатели в интегральные типы и обратно очень плохая практика.
smac 14.02.2010 17:12 # 0
nil 14.02.2010 23:47 # 0
guest 27.02.2010 04:18 # 0
xaionaro 27.02.2010 19:30 # 0
Возможно "data" имеет тип "char", и чтобы в "w" положить нужное значение поинтера (для 32-битных систем, 32-битное значение, что соотвествует int-у или, допустим, long-у), сначала приказываем считывать значение как int, а только потом ложим в w. Тут есть смысл, разве что не кроссплатформено это всё (хотя бы "long" использовали, хотя это было бы тоже убого).
xaionaro 27.02.2010 19:49 # 0
Правильным вариантом было бы например:
xaionaro 27.02.2010 19:52 # 0
crox 05.04.2010 09:38 # 0
w = GTK_WIDGET(*lw->data);