Сообщение Re: Ключевое отличие шаблона от макроса от 09.07.2023 7:26
Изменено 09.07.2023 8:41 rg45
Re: Ключевое отличие шаблона от макроса
Здравствуйте, Shmj, Вы писали:
S>Вот тут
S>
S>Т.е. заклеймили даже за саму попытку поставить в один ряд. И мне не ясно почему.
Тезисно:
Первый пункт выделен, потому что он мне представляется наиболее важным. Препроцессор гораздо примитивнее компилятора, его задача — подготовка текста программы для компилятора. У него на входе текст, и на выходе тоже текст. Злоупотребление препроцессором для эмуляции программных сущностей (функций и классов) сродни открыванию консервных банок молотком, или изготовлению мебели топором.
S>Вот тут
Автор: rg45
Дата: 07.07.23
чел. пишет:Дата: 07.07.23
S>
S>Дальше можно не читать. Одно только то, что ты ставишь макросы и шаблоны в один ряд, красноречиво говорит о твоей квалификации. Как говорится, у Вас не тридцатилетний опыт — у Вас годичный опыт, повторенный тридцать раз.
S>Т.е. заклеймили даже за саму попытку поставить в один ряд. И мне не ясно почему.
Тезисно:
- Шаблоны обрабатываются копилятором, а макросы обрабатываются препроцессором
Макросы не подчиняются правилам пространств имен и областей видимости
Макросы не подчиняются правилам поиска имен — name lookup и argument-dependent name lookup
Для макросов недоступны специализации и перегрузки
Для макросов не предусмотрено ничего похожего на отложенное (неявное) инстанцирование, которое очень востребовано при использовании шаблонов.
Для макросов недоступно огромное количество инструментов и паттернов, доступных для шаблонов — концепты, SFINAE, CRTP, variadic packs, template class argument deduction и пр.
Макросы не могут рекуррентно использовать сами себя.
Макросы небезопасны в плане скрытых побочных эффектов (классический пример — max(++a, ++b))
Макросы существенно проблематичнее в отладке и поиске ошибок, чем шаблоны.
Наверняка, еще есть что-то, что я навскидку не смог вспомнить
Первый пункт выделен, потому что он мне представляется наиболее важным. Препроцессор гораздо примитивнее компилятора, его задача — подготовка текста программы для компилятора. У него на входе текст, и на выходе тоже текст. Злоупотребление препроцессором для эмуляции программных сущностей (функций и классов) сродни открыванию консервных банок молотком, или изготовлению мебели топором.
Re: Ключевое отличие шаблона от макроса
Здравствуйте, Shmj, Вы писали:
S>Вот тут
S>
S>Т.е. заклеймили даже за саму попытку поставить в один ряд. И мне не ясно почему.
Тезисно:
Первый пункт выделен, потому что он мне представляется наиболее важным. Препроцессор гораздо примитивнее компилятора, его задача — подготовка текста программы для компилятора. У него на входе текст, и на выходе тоже текст. Злоупотребление препроцессором для эмуляции программных сущностей (функций и классов) сродни открыванию консервных банок молотком, или изготовлению мебели топором.
S>Вот тут
Автор: rg45
Дата: 07.07.23
чел. пишет:Дата: 07.07.23
S>
S>Дальше можно не читать. Одно только то, что ты ставишь макросы и шаблоны в один ряд, красноречиво говорит о твоей квалификации. Как говорится, у Вас не тридцатилетний опыт — у Вас годичный опыт, повторенный тридцать раз.
S>Т.е. заклеймили даже за саму попытку поставить в один ряд. И мне не ясно почему.
Тезисно:
- Шаблоны обрабатываются копилятором, а макросы обрабатываются препроцессором
Макросы не подчиняются правилам пространств имен и областей видимости
Макросы не подчиняются правилам поиска имен — name lookup и argument-dependent name lookup
Для макросов недоступны специализации и перегрузки
Для макросов не предусмотрено ничего похожего на отложенное (неявное) инстанцирование, которое очень востребовано при использовании шаблонов.
Макросы не могут рекуррентно использовать сами себя.
Для макросов недоступно огромное количество инструментов и паттернов, доступных для шаблонов — концепты, SFINAE, CRTP, variadic packs, template class argument deduction и пр.
Макросы небезопасны в плане скрытых побочных эффектов (классический пример — max(++a, ++b))
Макросы существенно проблематичнее в отладке и поиске ошибок, чем шаблоны.
Наверняка, еще есть что-то, что я навскидку не смог вспомнить
Первый пункт выделен, потому что он мне представляется наиболее важным. Препроцессор гораздо примитивнее компилятора, его задача — подготовка текста программы для компилятора. У него на входе текст, и на выходе тоже текст. Злоупотребление препроцессором для эмуляции программных сущностей (функций и классов) сродни открыванию консервных банок молотком, или изготовлению мебели топором.