Давайте посмотрим на оператор:
Email mail = Email::make().from("me@mail.com");
В первой части мы вызываем Email::make()
, это возвращает новый временный EmailBuilder
. Этот объект отвечает за заполнение Email
, который является его закрытым членом. Мы можем заполнить внутреннюю структуру Email
, поскольку это класс friend
(который следует использовать с осторожностью !! Не злоупотребляйте им!).
Теперь мы вызываем метод члена from
, который заполняет член m_form
в Email
, а возвращает EmailBuilder
. Это позволяет использовать объединенное использование функций EmailBuilder
, например:
Email mail = Email::make().from("me@mail.com").to("other@mail.com");
Является ли действительной командой , которая заполняет поля от и до (и это часто можно увидеть такое использование).
Наконец, у нас есть operator Email&&()
. Это оператор преобразования из EmailBuilder
в ссылку на r-значение Email
. Это перемещает внутреннее Email
, которое мы создали, наружу, позволяя захватить внутренности Email
в Email mail
. И здесь происходит « magi c» преобразования этого конструктора в фактическую почту.