Кіріспе

Ішінара үлгілік мамандандыру – сынып үлгісінің мамандандырылуының нақты бір түрі. Көбінесе C++ бағдарламалау тілімен байланысты қолданылады, бұл бағдарламашыға сынып үлгісінің кейбір аргументтерін ғана мамандандыруға мүмкіндік береді, ал толық мамандандыруда барлық үлгі аргументтері беріледі.

Үлгілер мен мамандандыру

Сынып үлгілері – нақты мета-сыныптар: олар толық емес абстрактілі дерек түрлері болып табылады, компиляторға қажетті дерек мүшелерімен сыныптарды қалай жасау керектігі туралы нұсқаулар береді. Мысалы, C++ стандартты контейнерлері – сынып үлгілері. Бағдарламашы векторды қолданғанда, оны нақты дерек түрімен, мысалы, int, string немесе double арқылы анықтайды. Вектордың әрбір түрі компилятордың объектілік кодында әртүрлі сыныпты құрайды, олардың әрқайсысы әртүрлі дерек түрімен жұмыс істейді. Бұл процесс генериктердің мономорфизациясы деп аталады. Егер сынып үлгісі белгілі бір дерек түрімен жиі қолданылатын болса және бұл дерек түрі кейбір оңтайландыруларға мүмкіндік берсе (мысалы, бүтін сандарды бит бойынша жылжыту, көбейту немесе 2-ге бөлуден гөрі), үлгі параметрлерінің бір бөлігі алдын ала орнатылған арнайы сынып үлгісін енгізуге болады. Компилятор мұндай сынып үлгісі кодта анықталғанда, әдетте берілген анықтамаға сәйкес келетін ең арнайы үлгі анықтамасын таңдайды. Сондықтан, толық мамандандыру (барлық үлгі аргументтері көрсетілген), барлық үлгі аргументтері сәйкес келсе, ішінара мамандандырудан басымдық алады.

Ішінара мамандандыру

Үлгілер бірнеше параметр түріне ие болуы мүмкін. Кейбір ескі компиляторлар үлгінің барлық параметрлерін немесе ешқайсысын мамандандыруға ғана рұқсат етеді. Ішінара мамандандыруды қолдайтын компиляторлар бағдарламашыға кейбір параметрлерді мамандандыруға, ал қалғандарын жалпы түрде қалдыруға мүмкіндік береді.