Показать сообщение отдельно

  #7  
Старый 03.09.2021, 22:14
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

Цитата:
Сообщение от SR_team  

Почему не оператор ()? Как это выглядит?
Оператор * перегружен для вызова функции, чтобы в range-based for можно было красиво получить возвратное значение. Да и в целом это позволяет много красивых вещей делать.

Ну например вот такое:

C++:





Код:
auto
iterate
=
signal
.
emit_iterate
(
"test"
)
;
std
::
vector

vec
(
iterate
.
begin
(
)
,
iterate
.
end
(
)
)
;


И в vec будут все значения которые вернулись после вызова коллбэков

(Только что залил обновление на гите, теперь на MSVC можно конструировать STL контейнеры через итераторы. Microsoft решили выебнуться проверкой на поля итератора)

Цитата:
Сообщение от SR_team  

Почему не оператор ()?
Мне кажется что вызов сигнала через () не очень явное действие, поэтому решил сделать на emit. В целом это на сам сигнал никак не влияет

Цитата:
Сообщение от SR_team  

Как это выглядит?
Примерно вот так:



Цитата:
Сообщение от SR_team  

UPD: В примере многопоточки сигнал что-то возвращает int(int)
UPD: сигнал может что-то возвращать, но при вызове через emit эти значения получить нельзя. Для этих целей стоит юзать emit_iterate и его методы begin и end возвращающие итераторы
 
Ответить с цитированием