Комментарии 29
Вторая часть нужна, так как там новый синтаксис описан, с практической точки зрения вторая часть является даже более полезной, чем первая.
+7
P.S. перевод норм, хотя в некоторых местах всё-таки лучше проработать контекст:
In order to know which strings have the line informationвы перевели как
Для того, чтобы узнать, какие строки содержат информацию о строкечто не раскрывает суть. Там ещё есть несколько моментов, советую уделить подобному больше внимания.
+1
По опыту (правда этот опыт набирался на Qt4) emit все же как-то используется. Я встречался с ошибками, приводящими к SegmetationFault и решавшимися добавлением emit.
-6
emit это пустой макрос и влиять он никак не может. А segmentation fault отлавливаются специальными, а не шаманскими средствами ;)
+3
Я в курсе, но valgrind ничего толкового не показывал, а падало все при входе в сигнал.
0
Такое поведение характерно для ситуации, при которой используются release и debug сборки совместно
+1
Допустим(я почти уверен, что не так, но было уже давно), ну как тогда объяснить, что добавление пустого макроса решило проблему?
0
Понятия не имею. Вероятнее всего — «просто так, вот, случилось». Так бывает. Именно поэтому я и рекомендовал искать настоящую причину, т.к. от такого «исправления» она никуда не делась.
+2
И так несколько раз в разных ситуациях? «Просто так вот получилось» — это не ответ. Да и шаманизма в программирование не бывает.
Как мы оба понимаем, что после этапа препроцессинга пустой макрос просто будет удален и на вход компилятору будет отдан один и тотже код, а значит и результат будет тот же самый. И ничего не должно измениться, но факт — изменилось.
Я не копался в моке, но что-то мне подсказывает, что отсутствие в доке кода без emit — это не случайно.
Как мы оба понимаем, что после этапа препроцессинга пустой макрос просто будет удален и на вход компилятору будет отдан один и тотже код, а значит и результат будет тот же самый. И ничего не должно измениться, но факт — изменилось.
Я не копался в моке, но что-то мне подсказывает, что отсутствие в доке кода без emit — это не случайно.
0
Шаманизма в программировании не бывает, а undefined behavior бывает.
Вообще, возможно, что-то не так собралось (make не пересобрал какой-то файл), а добавление emit изменило файл и инициировало пересборку.
Вообще, возможно, что-то не так собралось (make не пересобрал какой-то файл), а добавление emit изменило файл и инициировало пересборку.
0
Кстати, кто какие знает системы позднего связывания и динамических возможностей в статически типизируемых компилируемых языках?
Наиболее известные:
1 Виртуальные фукнции С++
2 Сообщения Objective C
3 Сигналы и слоты Qt
Что есть еще? Меня весьма интересует данная тема.
Наиболее известные:
1 Виртуальные фукнции С++
2 Сообщения Objective C
3 Сигналы и слоты Qt
Что есть еще? Меня весьма интересует данная тема.
0
Еще есть динамические языки, где, условно, a.b === a[«b»] и оно как-то проксируется на хэш таблицу (дерево, список) с методами.
0
Ну с динамическими все понятно, там вообще eval() есть. Меня интересуют в основном статические.
Хотя вы тоже правы, можно добавить четвертым пунктом рефлексию.
Хотя вы тоже правы, можно добавить четвертым пунктом рефлексию.
0
На C++ тоже можно запилить свой eval(). Переменные в текущий скоуп, правда, не получится, но вычисление строки — вполне возможно.
0
Ну вообще-то нет. Попробуйте объявить свой тип данных и использовать его. В общем случае, вам потребуется компилятор в рантайме.
0
Я же сказал, что в текущий скоуп не получится экспортировать переменные. И классы. Я имел ввиду любые имена, кроме, кстати, c-like функций. А вычислить любое корректное выражение на плюсах — пожалуйста :)
Кстати, если уж на то пошло, то заэмбеддить clang в приложение не такой уж большой гемор, но можно обойтись и system("...").
Кстати, если уж на то пошло, то заэмбеддить clang в приложение не такой уж большой гемор, но можно обойтись и system("...").
0
Лямда-функции всякие не подходят? Тогда C++ и Java новые версий.
0
Лямда-функции в данном контексте можно рассматривать как указатели на функцию (вырожденный случай виртуальных функций).
0
Оно все в конечном итоге сводится к косвенному вызову функции (т.е. к указателям на функции). Интерес представляют более высокоуровневые конструкции.
0
Тогда всё равно Java, так как там и полностью динамические вызовы есть (хоть их и нет в самом языке Java 7, но в других языках для JVM они есть и есть в Java 8).
-1
Есть еще ручное динамическое связывание: object->onClick = base->onClick;
+2
А является ли первая картинка неким посылом к понимаю содержимого статьи?
На картинке мы видим совершенно избыточный элемент — ленту ФУМ, намотанную под гайки ПНД тройника. Это совершенно ничего не даёт, так как уплотнительным элементом в этом тройнике являются резиновые кольца. Подобная же намотка не поможет и в случае протечкам по кольцам — вода просто вытечет со стороны трубы.
На картинке мы видим совершенно избыточный элемент — ленту ФУМ, намотанную под гайки ПНД тройника. Это совершенно ничего не даёт, так как уплотнительным элементом в этом тройнике являются резиновые кольца. Подобная же намотка не поможет и в случае протечкам по кольцам — вода просто вытечет со стороны трубы.
+1
Смотря на картинку, нельзя с 100% уверенностью сказать, что по трубам течёт именно вода, а не другая, более вязкая, жидкость.
0
Вода, вода там :)
Вот источник фотки: dacha.innsk.ru/444
Вот источник фотки: dacha.innsk.ru/444
+1
Замечательная статья, замечательный перевод, но хочу присоединиться, что явно не хватает второй части для нового синтаксиса (Qt 5+).
Впрочем, разобраться в этом можно за полчаса, поколупавшись в выводе MOC.
Впрочем, разобраться в этом можно за полчаса, поколупавшись в выводе MOC.
0
Добавил в конец поста ссылку на перевод второй части.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как работают сигналы и слоты в Qt (часть 1)