Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Ішінара үлгілік мамандандыру – сынып үлгісінің мамандандырылуының нақты бір түрі. Көбінесе C++ бағдарламалау тілімен байланысты қолданылады, бұл бағдарламашыға сынып үлгісінің кейбір аргументтерін ғана мамандандыруға мүмкіндік береді, ал толық мамандандыруда барлық үлгі аргументтері беріледі.
Partial template specialization is a particular form of class template specialization. Usually used in reference to the C++ programming language, it allows the programmer to specialize only some arguments of a class template, as opposed to explicit full specialization, where all the template arguments are provided.
Үлгілер мен мамандандыру
Сынып үлгілері – нақты мета-сыныптар: олар толық емес абстрактілі дерек түрлері болып табылады, компиляторға қажетті дерек мүшелерімен сыныптарды қалай жасау керектігі туралы нұсқаулар береді. Мысалы, C++ стандартты контейнерлері – сынып үлгілері. Бағдарламашы векторды қолданғанда, оны нақты дерек түрімен, мысалы, int, string немесе double арқылы анықтайды. Вектордың әрбір түрі компилятордың объектілік кодында әртүрлі сыныпты құрайды, олардың әрқайсысы әртүрлі дерек түрімен жұмыс істейді. Бұл процесс генериктердің мономорфизациясы деп аталады. Егер сынып үлгісі белгілі бір дерек түрімен жиі қолданылатын болса және бұл дерек түрі кейбір оңтайландыруларға мүмкіндік берсе (мысалы, бүтін сандарды бит бойынша жылжыту, көбейту немесе 2-ге бөлуден гөрі), үлгі параметрлерінің бір бөлігі алдын ала орнатылған арнайы сынып үлгісін енгізуге болады. Компилятор мұндай сынып үлгісі кодта анықталғанда, әдетте берілген анықтамаға сәйкес келетін ең арнайы үлгі анықтамасын таңдайды. Сондықтан, толық мамандандыру (барлық үлгі аргументтері көрсетілген), барлық үлгі аргументтері сәйкес келсе, ішінара мамандандырудан басымдық алады.
Class templates are really meta classes: they are partial abstract data types that provide instructions to the compiler on how to create classes with the proper data members. For example, the C++ standard containers are class templates. When a programmer uses a vector, one instantiates it with a specific data type, for example, int, string or double. Each type of vector results in a different class in the compiler's object code, each one working with a different data type. This process is called monomorphization of generics. If one knows that a class template will be used with a specific data type fairly often and this data type allows some optimizations (e. g. bit shifting with integers, as opposed to multiplying or dividing by 2), one may introduce a specialized class template with some of the template parameters preset. When the compiler sees such a class template instantiated in code, it will generally choose the most specialized template definition that matches the instantiation. Therefore, an explicit full specialization (one where all the template arguments are specified) will be preferred to a partial specialization if all the template arguments match.
Ішінара мамандандыру
Үлгілер бірнеше параметр түріне ие болуы мүмкін. Кейбір ескі компиляторлар үлгінің барлық параметрлерін немесе ешқайсысын мамандандыруға ғана рұқсат етеді. Ішінара мамандандыруды қолдайтын компиляторлар бағдарламашыға кейбір параметрлерді мамандандыруға, ал қалғандарын жалпы түрде қалдыруға мүмкіндік береді.
Templates can have more than one parameter type. Some older compilers allow one only to specialize either all or none of the template's parameters. Compilers that support partial specialization allow the programmer to specialize some parameters while leaving the others generic.