170 похожих чатов

А как работает std::enable_if<Condition>::type или std::enable_if_t<Condition>? Как я понял он

разруливает перегрузку, но перегрузка только по возвращаемому типу же запрещена

5 ответов

22 просмотра

у тебя по факту нет перегрузки. у тебя просто останется один шаблон, второго просто не будет. свинка при раскрытии с ошибкой выкидывает (отключает) шаблон из работы и рассмотрения.

TTY- Автор вопроса
Stas Koynov
у тебя по факту нет перегрузки. у тебя просто оста...

А как оно(std::enable_if) это делает, в таком случае?

TTY
А как оно(std::enable_if) это делает, в таком случ...

Вроде он в "неправильной" ветке обращается к члену ::type у структуры, в которой такого члена нет

TTY
А как оно(std::enable_if) это делает, в таком случ...

Ну я не педагог, лучше почитать про SFINAE (свинку) в вики или еще где. само написание enable_if рассмотрено в книге: Шаблоны С++ справочник разработчика 2ed 2018 - Вандервуда. Смысл такой что в компиляторе ошибочное раскрытие шаблона - не является ошибкой, чтобы во время подбора (лучшего варианта) не отвалится при не удачной попытке поиска. На этом и построена Свинка, enable_if раскрывается в правильный(удачный) или не правильный(не удачный) шаблон. не удачный приводит к тому что весь шаблон (функция, метод, класс) оказывается ошибочным и он исключается из рассмотрения. и компилятор продолжает работу дальше. НО ты этим финтом как бы отключил (выкинул) не нужную функциональность (функцию, метод, класс), тем самым оставив нужную.

TTY
А как оно(std::enable_if) это делает, в таком случ...

Почитай про SFINAE Ошибка при инстанцировании шаблона не вызывает ошибку компиляции, а просто выкидывает перегрузку из рассмотрения std::enable_if<false>::type не существует, обращение к нему -- ошибка

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта