Sobes.tech
Middle — Middle+

როგორ გამოიყურება შაბლონის ფუნქციის საბოლოო კომპილირებული კოდი, როდესაც ის გამოიძახება სხვადასხვა ტიპის არგუმენტებით?

sobes.tech AI

პასუხი AI-სგან

C++-ում շաբլոնային ֆունկցիայի կոմպիլյացիայի ժամանակ՝ յուրաքանչյուր եզակի արգումենտների տիպերի հավաքածուի համար, կոմպիլատորը ստեղծում է ֆունկցիայի առանձին տարբերակ (շաբլոնը ինստանցավորում է): Դա նշանակում է, որ եթե لديك մի շաբլոն՝

template<typename T>
T add(T a, T b) {
    return a + b;
}

և կանչում եք add(1, 2) և add(1.5, 2.5), ապա կոմպիլատորը կստեղծի երկու առանձին ֆունկցիա՝

int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }

Այսպիսով, վերջնական կոմպիլյատացված կոդը պարունակում է կոնկրետ տարբերակներ յուրաքանչյուր տիպի համար, որի հետ այն կանչվել է: Սա թույլ է տալիս օգտագործել շաբլոնները որպես ընդհանուր ֆունկցիաներ՝ առանց կատարողականության կորուստի, քանի որ կանչերը վերածվում են սովորական ֆունկցիաների կոնկրետ տիպերով։