Avantajele șablonului

Șabloanele pot fi utilizate pentru a rezolva următoarele sarcini.

Creați o clasă de colectare în condiții de siguranță (de exemplu, o stivă) care poate funcționa cu orice tip de date.







Adăugarea unor funcții suplimentare de verificare a tipului, care altfel ar accepta pointeriile void.

Încapsularea grupurilor de operatori suprascrie pentru a schimba comportamentul unui tip (pointeri inteligenți).

Cele mai multe dintre aceste utilizări pot fi implementate fără șabloane, însă utilizarea șabloanelor oferă mai multe avantaje.

Șabloanele sunt mai ușor de scris. Se creează o singură versiune universală a unei clase sau funcții, mai degrabă decât crearea manuală a specializărilor.

Șabloanele sunt mai ușor de înțeles deoarece oferă o modalitate simplă și inteligibilă de reprezentare abstractă a informațiilor de tip.

Șabloanele sunt sigură pentru tip. Deoarece tipurile pentru care acțiunile șabloanelor sunt cunoscute la momentul compilării, compilatorul poate efectua o verificare de tip înainte de apariția erorii.

Pentru mai multe informații, consultați următoarele subiecte:

Următoarele sunt câteva probleme când lucrați cu o macrocomandă.

Pentru compilator, nu există nicio modalitate de a verifica dacă parametrii macro sunt tipuri compatibile. Macrocomanda se extinde fără verificări de tip special.

Parametrii i și j sunt evaluați de două ori. De exemplu, dacă oricare dintre parametri are o variabilă de incrementare postfix, incrementul este efectuat de două ori.

Deoarece macrocomenzile sunt extinse de către preprocesor, mesajele de eroare ale compilatorului se vor referi la macrocomanda extinsă, nu la definirea macro-ului în sine. În plus, macroul va fi afișat într-o formă extinsă în timpul depanării.

Multe funcții care sunt acum implementate folosind indicii goi pot fi implementate folosind șabloane. Instrumentele goale sunt adesea folosite pentru a permite funcțiilor să efectueze operații pe date de tip necunoscut. Dacă utilizați indicii nulă, compilatorul nu poate face distincție între tipuri și prin urmare poate efectua verificarea tipului sau implementarea comportamentului specific pentru orice tip, de exemplu, utilizați operatori de tip specific, supraîncărcarea operatorilor, constructorii sau distrugătorii.







Lucrul cu șabloanele, puteți crea funcții și clase care funcționează cu datele tastate. În definiția șablonului, tipul arată abstracționat. Totuși, la momentul compilării, compilatorul creează o versiune separată a funcției pentru fiecare tip specificat. Aceasta permite compilatorului să proceseze șabloane de clasă și de funcții ca și cum ar fi efectuat operații pe anumite tipuri. Utilizarea șabloanelor permite, de asemenea, creșterea clarității codului, deoarece nu este necesar să creați cazuri speciale de utilizare pentru tipuri complexe, cum ar fi structuri.

C ++ vă permite să creați clase pointer inteligente care să includă indicatori și să suprascrieți operatorii pointerilor pentru a adăuga noi funcții la pointeri. Șabloanele vă permit să creați programe universale de coajă pentru a include indicii de aproape orice tip.

Următorul cod arată un simplu colector de gunoi pentru numărul de referință. Clasa de șabloane Ptr implementează un pointer de colectare a gunoiului la orice clasă derivată din RefCount.

Clasele RefCount și Ptr oferă o soluție simplă de colectare a gunoiului pentru orice clasă care poate permite moștenirea încărcării pe instanțele int din RefCount. Rețineți că principalul avantaj al utilizării unei clase parametrice, de exemplu Ptr. În locul unei clase mai universale, de exemplu Ptr. este siguranța completă a primului. Codul anterior asigură că Ptr poate fi utilizat în aproape orice loc unde T * este utilizat; dimpotrivă, clasa universală Ptr ar oferi doar conversii implicite în void *.

De exemplu, luați în considerare clasa care este utilizată pentru a crea și procesa fișiere, caractere, șiruri de caractere și așa mai departe, care au fost primite în timpul colectării gunoiului. Din clasa de șabloane Ptr compilatorul creează clase Ptr șablon. PTR. PTR și așa mai departe și funcțiile lor membre: Ptr::

Ptr (). PTR:: operatorul Fișier * (). PTR::

Ptr (). PTR:: operator String * () și așa mai departe.

Șabloanele reprezintă o modalitate convenabilă de a implementa clasele de colectare.

Colecția MyStack este o implementare simplă a stiva. Doi parametri de șablon, T și i. Specificați tipul de elemente de pe stivă și numărul maxim de astfel de elemente din stivă. Funcțiile membrilor împing și adăugați și eliminați elementele de pe stivă. Stiva crește în direcția de dedesubt.

Afișare: Mijlocit protejat

Această pagină a fost utila? Da, nu

Au rămas 1500 de caractere

Mulțumesc! Vă mulțumim pentru feedbackul dvs. Opinia dvs. este foarte importantă pentru noi.

Centre de dezvoltare

comunitate

Contactați-ne







Articole similare

Trimiteți-le prietenilor: