Pull to refresh

Comments 29

Вторая часть нужна, так как там новый синтаксис описан, с практической точки зрения вторая часть является даже более полезной, чем первая.
P.S. перевод норм, хотя в некоторых местах всё-таки лучше проработать контекст:
In order to know which strings have the line information
вы перевели как
Для того, чтобы узнать, какие строки содержат информацию о строке
что не раскрывает суть. Там ещё есть несколько моментов, советую уделить подобному больше внимания.
По опыту (правда этот опыт набирался на Qt4) emit все же как-то используется. Я встречался с ошибками, приводящими к SegmetationFault и решавшимися добавлением emit.
emit это пустой макрос и влиять он никак не может. А segmentation fault отлавливаются специальными, а не шаманскими средствами ;)
Такое поведение характерно для ситуации, при которой используются release и debug сборки совместно
Допустим(я почти уверен, что не так, но было уже давно), ну как тогда объяснить, что добавление пустого макроса решило проблему?
Понятия не имею. Вероятнее всего — «просто так, вот, случилось». Так бывает. Именно поэтому я и рекомендовал искать настоящую причину, т.к. от такого «исправления» она никуда не делась.
И так несколько раз в разных ситуациях? «Просто так вот получилось» — это не ответ. Да и шаманизма в программирование не бывает.

Как мы оба понимаем, что после этапа препроцессинга пустой макрос просто будет удален и на вход компилятору будет отдан один и тотже код, а значит и результат будет тот же самый. И ничего не должно измениться, но факт — изменилось.

Я не копался в моке, но что-то мне подсказывает, что отсутствие в доке кода без emit — это не случайно.
Шаманизма в программировании не бывает, а undefined behavior бывает.

Вообще, возможно, что-то не так собралось (make не пересобрал какой-то файл), а добавление emit изменило файл и инициировало пересборку.
С пересборкой возможно, это было уже года 3-4 назад, детали уже позабылись. К сожалению, провести тщательное расследование сейчас не представляется возможным, но мне почему-то помниться, как я убедился, что добавление emit-а убирает ошибку, а удаление — добавляет.
Кстати, кто какие знает системы позднего связывания и динамических возможностей в статически типизируемых компилируемых языках?
Наиболее известные:
1 Виртуальные фукнции С++
2 Сообщения Objective C
3 Сигналы и слоты Qt
Что есть еще? Меня весьма интересует данная тема.
Еще есть динамические языки, где, условно, a.b === a[«b»] и оно как-то проксируется на хэш таблицу (дерево, список) с методами.
Ну с динамическими все понятно, там вообще eval() есть. Меня интересуют в основном статические.
Хотя вы тоже правы, можно добавить четвертым пунктом рефлексию.
На C++ тоже можно запилить свой eval(). Переменные в текущий скоуп, правда, не получится, но вычисление строки — вполне возможно.
Ну вообще-то нет. Попробуйте объявить свой тип данных и использовать его. В общем случае, вам потребуется компилятор в рантайме.
Я же сказал, что в текущий скоуп не получится экспортировать переменные. И классы. Я имел ввиду любые имена, кроме, кстати, c-like функций. А вычислить любое корректное выражение на плюсах — пожалуйста :)
Кстати, если уж на то пошло, то заэмбеддить clang в приложение не такой уж большой гемор, но можно обойтись и system("...").
Лямда-функции всякие не подходят? Тогда C++ и Java новые версий.
Лямда-функции в данном контексте можно рассматривать как указатели на функцию (вырожденный случай виртуальных функций).
Оно все в конечном итоге сводится к косвенному вызову функции (т.е. к указателям на функции). Интерес представляют более высокоуровневые конструкции.
Тогда всё равно Java, так как там и полностью динамические вызовы есть (хоть их и нет в самом языке Java 7, но в других языках для JVM они есть и есть в Java 8).
Есть еще ручное динамическое связывание: object->onClick = base->onClick;
А является ли первая картинка неким посылом к понимаю содержимого статьи?

На картинке мы видим совершенно избыточный элемент — ленту ФУМ, намотанную под гайки ПНД тройника. Это совершенно ничего не даёт, так как уплотнительным элементом в этом тройнике являются резиновые кольца. Подобная же намотка не поможет и в случае протечкам по кольцам — вода просто вытечет со стороны трубы.
Смотря на картинку, нельзя с 100% уверенностью сказать, что по трубам течёт именно вода, а не другая, более вязкая, жидкость.
Google картинки рулят!
Замечательная статья, замечательный перевод, но хочу присоединиться, что явно не хватает второй части для нового синтаксиса (Qt 5+).

Впрочем, разобраться в этом можно за полчаса, поколупавшись в выводе MOC.
Добавил в конец поста ссылку на перевод второй части.
Sign up to leave a comment.

Articles