Базовый курс C++ (MIPT, ILab). Lecture 19. Вариабельные шаблоны.

Поділитися
Вставка
  • Опубліковано 15 лис 2024

КОМЕНТАРІ • 35

  • @ivandomnikov6485
    @ivandomnikov6485 2 роки тому +12

    Thank you, Konstantin, for keep teaching us. Please be careful in that tragic time. If you or some other good developers will need to relocate to another country please let me know

    • @niklkelbon3662
      @niklkelbon3662 2 роки тому

      > let me know
      you didn't leave any contacts)

    • @ivandomnikov6485
      @ivandomnikov6485 2 роки тому

      @@niklkelbon3662 Leave your LinkedIn link here or I can find you

  • @vdalart
    @vdalart 2 роки тому +8

    25:14 Извините, не понял фразу "чтобы она (Heavy) сбайндилась со ссылкой, на фрейме этой функции должна создаться его копия". По-моему, два копирования возникают, потому что первый раз Heavy копируется при передаче по значению в конструктор StackElem, а второй раз при инициализации elem в конструкторе. Или я не прав?

    • @alexandercrack7624
      @alexandercrack7624 Рік тому

      Я то же так считаю

    • @jalomic
      @jalomic Рік тому

      Всё верно, видимо Константин ошибся

  • @thesunrise777
    @thesunrise777 Рік тому

    1:12:20 В range-based обходе никогда не возвращается первый элемент.
    ++nelts нужно вынести вниз за break из оператора запятая

  • @DENRENMaster
    @DENRENMaster 2 роки тому +2

    Прекрсное видео! Но думаю, что нужно исправить ошибку в таблице 57:20, а то получается оператор запятая, а не свёртка))
    А именно init OP ... op pack и pack op ... OP fini

  • @niklkelbon3662
    @niklkelbon3662 2 роки тому +2

    1:12:34 а что если разыменование итератора возвращает &&? Может сделать func(forward(elt)) ?)) А то может там функция принимает && ...?)

    • @tilir
      @tilir  2 роки тому

      Обосновано, но слайды бы замусорило. Я уже показал технику проброса функции в разговоре о прозрачной оболочке, все всё поняли.

  • @MikhailZavelskii
    @MikhailZavelskii 7 місяців тому

    24:35 Строка 59 - А по своей сути это разве не push_front?

  • @jalomic
    @jalomic Рік тому +2

    25:10 "Должна сбайндится со сссылкой". Ничего подобного, там просто передача по ссылке, двойное копирование - это дальше в передаче в конструктор, а потом инициализация мембера - вот два копирования. Можете проверить, добавив в push лог.

  • @ufabiz
    @ufabiz 2 роки тому +1

    53:33 очень смешно получилось.

  • @MikhailZavelskii
    @MikhailZavelskii 7 місяців тому +3

    > Впервые познакомили с void_t
    > Да господи что за фигня, чем она может помочь
    > Поигрался с void_t и SFINAE
    > Мало того что понял void_t
    > Так еще понял и SFINAE
    Лучше на ютубе, чем лекции Констатина, я не увижу. Сначала не соглашаешься, бьешься головой пытаясь понять ... а потом как проникаешься. И вот интересно, больше таких лекций я не видел. Воистину Физтех могуч

  • @d7d1cd
    @d7d1cd 2 роки тому

    Все ли виды итераторов должны быть copyable? Если да, то правильно ли, что если итератор указывал на какой-то элемент контейнера, то его копия так же обязана указывать на тот же элемент?

    • @tilir
      @tilir  2 роки тому +1

      Да конечно, copyable входит в concept cpp17-iterator, см. [iterator.traits]

  • @yakryt7228
    @yakryt7228 2 роки тому +1

    Константин, здравствуйте! Подскажите пожалуйста, вопрос немного не в тему ролика, но не знал где лучше спросить. Возможно, Вы видели книгу C++20 - The Complete Guide by Nicolai M. Josuttis. Она еще в процессе написания, но готовность 84% на текущий момент. Как думаете, стоит ее прочесть или что-то другое, возможно, порекомендуете о возможностях 20 стандарта почитать?

    • @tilir
      @tilir  2 роки тому +2

      Нет, пока не видел. Посоветовать пока тоже нечего. Сейчас люди только потихоньку осознают стандарт. Должно пройти ещё года четыре чтобы накопилось некое критическое понимание. До тех пор лучше ориентироваться на конференции.

  • @d7d1cd
    @d7d1cd 2 роки тому +1

    1:31:07 В следующей лекции не раскрыт секрет как написать tree_get (видимо студенты справились). Можно узнать как это решается в 1 строчку?

    • @tilir
      @tilir  2 роки тому +5

      Только хорошо подумайте прежде чем заглядывать в ответ: godbolt.org/z/7qhd5Y3ar

    • @DanielPinchuk
      @DanielPinchuk 5 місяців тому

      @@tilir А можно как-нибудь взять left не по адресу, а по имени поля, чтобы не прибивать его гвоздями к int?

    • @frest4070
      @frest4070 Місяць тому

      @@tilir тут уже есть комментарий про то, что в таблице на 56:50 должен быть init op ... op pack. Ведь у нас top выступает как init.
      намучался, пытаясь сделать как в таблице. Но я изначально почему-то затупил. адреса взять догадался. а то что к ним доступ через ->*, а не -> уже не вошло в мое сознание(хотя посмотрел лекцию про перегрузку по подсказке).

  • @DrUlrih
    @DrUlrih 2 роки тому

    А как сделать forward declaration, для функции с void_t, поместив в файл .h а реализацию в .hpp?

    • @tilir
      @tilir  2 роки тому

      А в чём проблемы?

  • @DrUlrih
    @DrUlrih 2 роки тому

    Подскажите, пожалуйста, как правильнее делать:
    1. Последний параметр шаблона через void_t
    2. enable_if_t в последнем параметре шаблона
    3. Возвращаемый тип через enable_if_t в сигнатуре функции.
    Или есть ещё методы (приёмы) для SFINAE?

    • @tilir
      @tilir  2 роки тому +1

      Правильнее для чего? Это разные техники. void_t служит для проверки существования (как квантор всеобщности). enable_if разбирается в лекции по итераторам и служит для проверки условий (и их отображения на существование/несуществование). У обоих есть свои применения.
      В любом случае портить сигнатуру считается дурным тоном и так делают только от безысходности.
      А правильно в современном C++ конечно писать requires. До этого мы ещё дойдём.

  • @d7d1cd
    @d7d1cd 2 роки тому

    1:24:44 Forward итератор так же должен уметь разыменовываться в l-value

    • @tilir
      @tilir  2 роки тому

      Мне кажется это опционально. То есть это возможно но это не требование.

    • @d7d1cd
      @d7d1cd 2 роки тому

      Ясно. Ну главное, что это разрешено реализовывать для forward итератора. А не то, что "forward итератор НЕ должен уметь разыменовываться в l-value".

  • @lubalubasha9734
    @lubalubasha9734 2 роки тому

    Привет, подскажите пожалуйста, продублированы ли эти лекции где-то еще? вк, зен итп?

    • @tilir
      @tilir  2 роки тому

      Почитайте вкладку коммьюнити этого канала. Всё есть: и телеграм и дискорд и рутьюб и торренты.

  • @DrUlrih
    @DrUlrih 2 роки тому

    По поводу получения i-го элемента из пачки, можно так?
    std::get(make_tuple(args...));

    • @tilir
      @tilir  2 роки тому

      Вполне. Только мы этого ещё не проходили в этот момент =)

  • @DART2WADER
    @DART2WADER 2 роки тому

    Хочется повторить забег но на работе завал. Как всегда на высоте.