Pull to refresh

Comments 17

UFO just landed and posted this here
каждой вспомогательной сущности

Немного подправил и добавил оригинальный термин. Просится «помощник» но вроде как звучит более общно.
Теперь, запятая будет на самом деле вызывать то, что вы даже можете перегрузить. Это то, что мы делаем в
Слушайте, ну я же просил вас в комментариях к предыдущему посту :(
Халтурите, товарищ. Но за перевод спасибо, всё-таки труд.
В оригинальной статье сказано «enables support for lambda expressions», что вы перевели как «позволяет использовать лямда-выражения». Однако использовать можно только замыкания, лямбда-выражения это лишь объект описания.
О каком таком операторе ::* идёт речь у автора оригинала? Это указатель на член что ли? Так никакой не оператор это вроде.
Да, именно указатель на член (в объявлении этого указателя). В MSDN он назван (и в оригинале и в переводе) как оператор.
Ясно, предпочитаю опираться на стандарт, в нем слово оператор отсутствует.
Насколько я знаю метод QObject::connect позволяет реализовывать межпотоковое взаимодействие. QObject::connect как-то по особому обрабатывает вызовы из другого (не главного Qt потока)?
Каждый QObject принадлежит к какому-то потоку (по умолчанию это поток, в котором объект был создан, но можно переместить его в другой поток вручную). QObject::connect использует эту информацию.

В Qt существует три основных типа соединения: Direct, Queued, BlockingQueued. Если отправитель и получатель сигнала находятся в одном потоке, по умолчанию используется Direct, т.е. слот вызывается синхронно при вызове функции отправки сигнала. Если же они находятся в разных потоках, то по умолчанию используется Queued, в котором сигнал после создания просто кладется в очередь, а слот вызывается из event loop того потока, к которому принадлежит получатель. Это позволяет безопасно обмениваться данными с другими потоками, ведь сигналы — потокобезопасные функции, а слоты будут вызываться в том же потоке, что и другие методы объекта-получателя. При желании можно изменить поведение по умолчанию и указать тип соединения, который вы хотите использовать.
сигнал после создания просто кладется в очередь, а слот вызывается из event loop того потока, к которому принадлежит получатель

Насколько я знаю (и достоверно пишет Шлее) при этом формируется объект класса, производного от QEvent, который уже и кладется в очередь.
Когда разбирался в новом синтаксисе и увидел перегруженный оператор «запятая» — честно скажу, офигел)
Ну, этот оператор уже давно был в C++. Вот весь список операторов (перегружаемых и нет).
Одно дело, что он давно доступен для перегрузки, а другое — найти ему правильное и уместное применение!
В любом dsl ему можно найти место, в основном для организации неких перечислений. Посмотрите, например, на Boost Spirit.
Ещё часто он используется для организации подобного синтаксиса:
print «Hello », username;
Это, опять же, перечисление.
Им можно удивлять друзей:

Number a, b; // оператор запятая соответственным образом перегружен
a = 7;
b = a + 1,3; // b = 8,3
Незнающих субъектов можно многим удивить :-)
Sign up to leave a comment.

Articles