Функциялардын жана класстардын шаблондору
Кодду бир жолу жазыңыз, компилятор ар бир тип үчүн версия жаратат
int үчүн бир max, double үчүн башка, std::string үчүн дагы бирин жазуунун ордуна, сиз типке караштуу бирдиктүү универсалдуу версия жазасыз. Аны колдонгонуңузда компилятор керектүү конкреттүү функцияны же классты өзү жаратат. Бул C++ тилиндеги жалпыланган программалоонун негизги механизми, жана бүткүл стандарттык шаблон китепканасы (STL) ушуга курулган.
- бир же бир нече тип-параметри бар функция шаблондорун жазуу,
- компиляторго шаблон аргументтерин чыгарууга уруксат берүү же аларды ачык берүү,
- жалпыланган
PairжеStackсыяктуу класс шаблондорун жазуу, - типтик эмес шаблон параметрлерин колдонуу (мисалы, компиляция учурунда белгилүү өлчөм),
- инстанциялоо деген эмне экенин жана шаблон коду эмне үчүн баш файлдарда жатарын түшүндүрүү.
1. Шаблондор кайсы маселени чечет?
Эки маанинин чоңун кайтарган функция керек деп элестетиңиз. Шаблонсуз сиз ошол эле логиканы ар бир тип үчүн көчүрүп жазасыз:
int maxOf(int a, int b) { return (a > b) ? a : b; }
double maxOf(double a, double b) { return (a > b) ? a : b; }
std::string maxOf(std::string a, std::string b) { return (a > b) ? a : b; }
Денелер бирдей, тип гана айырмаланат. Бул кайталоо бузулууга даяр: бир жерде катаны оңдоп, башкаларын унутуп каласыз. Шаблон коддун формасын сүрөттөп, типти кийин толтурула турган бош орун катары калтырууга мүмкүндүк берет.
Салыштыруу: печенье калыбын элестетиңиз. Калып - печенье эмес, форма. Аны камырга (int) басыңыз - «int формасындагы» функция чыгат; башка камырга (std::string) басыңыз - «string формасындагы» функция чыгат. Калып (шаблон) бир жолу жазылат; компилятор талап боюнча конкреттүү печеньелерди (чыныгы функцияларды) басып чыгарат.