Я программировал на С++ в течение нескольких лет, и я использовал STL совсем немного и несколько раз создал свои собственные классы шаблонов, чтобы увидеть, как это делается.
Теперь я пытаюсь интегрировать шаблоны глубже в мой OO-дизайн, и острая мысль продолжает возвращаться ко мне: они просто макросы, действительно... Вы могли бы реализовать (скорее UGLY) auto_ptrs, используя #defines, если вы действительно хотели.
Этот способ мышления о шаблонах помогает мне понять, как мой код действительно будет работать, но я чувствую, что мне как-то не хватает смысла. Макросы означают воплощение зла, но "шаблонное метапрограммирование" - это все ярость.
Итак, каковы реальные различия? и как шаблоны могут избежать опасностей, с которыми ведет #define, например
- Неисправные ошибки компилятора в места, где вы их не ожидаете?
- Накидка кода?
- Сложность в отслеживании кода?
- Настройка точек останова отладчика?