82______________________________Часть II. Программирование на C++
заключаться в типе переставляемых данных. И чтобы отвлечься от типа данных, можно написать маленькое макроопределение (до шаблонов дело еще не дошло):
#define SWAP(Т) \
inline void Swap( Т& х, Т& у) \
{ Т t = x; x " у; у = t }
Теперь, чтобы материализовать функцию swap для нужного типа данных, поставьте вызов макроопределения SWAP в любое место, где может размещаться определение функции. Например, строка
SWAP(double) ;
будет проинтерпретирована препроцессором таким образом:
inline void Swap( doubles x, doubles у) { double t = x; x = у; у = t }
Аналогичная процедура произойдет при подстановке любого 'другого типа данных.
Этот фрагмент приведен лишь в качестве экскурса в историю; к счастью, теперь шаблоны стали полноправной составляющей C++, и обращаться с ними проще, чем с макросами. Полностью работа с шаблонами описана в главе 19 "Классы-шаблоны".
Отмирание препроцессора
Страуструп, создатель C++, отмечал, что был бы рад избавиться от препроцессора. И в принципе передача прерогатив препроцессора чисто языковым средствам может в будущем уничтожить препроцессор. Но пока этого сделать нельзя, поскольку масса уже написанного кода пойдет насмарку.
Процесс искоренения изживших себя средств языка может длиться годы. Как правило, сначала реализуются более удачные альтернативы; устаревшие конструкции по-прежнему обрабатываются, но сопровождаются соответствующими предупреждениями. Потом их использование переходит в разряд полноценных ошибок и они благополучно отбрасываются. Чтобы нововведения прижились, может потребоваться несколько версий языка, что, естественно, требует времени; а немедленная замена существенных его частей погубит километры уже написанного текста, что неизбежно повлечет за собой поток проклятий на головы разработчиков языка.
Замечание '
Не правда ли, эти рассуждения о стадиях развития языковых конструкций вызывают ассоциации с тем, что происходит сейчас вокруг DOS? Длинные имена, возникшие с появлением Windows 95, не очень-то совместимы с прежними версиями DOS и Windows. Они-то и могут стать пресловутой соломинкой, которая наконец переломит хребет DOS.