Макросы — это директивы препроцессора, которые выполняют простую текстовую подстановку перед компиляцией. Например:
#define MAX_SIZE 100
Шаблоны — это возможности языка C++, которые позволяют писать универсальный код независимо от конкретных типов данных. Они обрабатываются во время компиляции.
Макрос выполняет простую текстовую замену:
#define SQUARE(x) ((x) * (x))
Шаблон обеспечивает типобезопасную универсальную функциональность:
template <typename T>
T square(T x) { return x * x; }
Шаблоны отлично подходят, когда тебе нужен один и тот же алгоритм для разных типов данных. Шаблон функции сортировки без проблем работает с целыми числами, строками или пользовательскими объектами без дублирования кода:
template <typename T>
void sort(T* array, int size) { /* логика сортировки */ }
Реализовать то же самое с помощью макросов было бы громоздко и чревато ошибками.
Используй шаблоны для универсального программирования, когда требуется безопасность типов и гибкость на этапе компиляции. Используй макросы редко — только для простых определений констант, где шаблон был бы избыточным. Современный C++ в большинстве случаев явно предпочитает шаблоны макросам.
Макросы обрабатываются препроцессором перед компиляцией, а шаблоны обрабатываются компилятором во время компиляции.
Новый — ещё не проверен сообществом
Вы