Există un șablon C ++ posibilitate interesantă pentru a se parameterize parametrii șablonului. Deci, înseamnă asta?
Sunt momente când parametrul șablon în sine este o clasă de șablon și, de asemenea, trebuie să specificați setarea pentru instanțierea acestuia. De exemplu, genericele dispun pentru imprimarea unui container standard de orice fel în fluxul:
Și totul nu este nimic, ci doar sintaxa C ++, nu este adevărat. Nu poți doar să scrie un C
Acum, de exemplu, complet (template_parameter.cpp):
Și rulați fișierul compilat:
Se vede clar că prima linie imprimată întregi, al doilea material, al treilea simbol și al patrulea rând.
template_as_parameter.cpp (38). C3208 eroare: 'imprimare'. lista de parametri șablon pentru șablon clasa „std :: vector“ nu se potrivește cu lista de parametri șablon pentru parametrul șablon șablon „C“
Din ce am ajuns la concluzia că compilatorul Microsoft nu acceptă o sintaxă similară.
Am fost foarte dezamăgit de acest fapt, ca un întreg este atitudine foarte pozitivă în cl.exe. Și apoi se dovedește că, chiar și compilator borlandovy înțelege și nu cl.exe. Dacă cineva știe dacă există o cheie secretă pentru a activa suportul pentru posibilități „dificile și rare“ de compilator C ++ Microsoft - autoeducație. Aș fi foarte recunoscător.
Anticipând întrebări de genul „de ce atât de dificil, dar încă slab tolerat“ - adevărate. Personal, aș dori să menționez toate cele de mai sus descrise la „colțurile întunecate“ ale C ++, dar a fost prea interesant pentru el să urce.
Un șablon de containere standard au oa doua opțiune, așa-numitul repartitorului. Această opțiune este adesea utilizată cu valoarea implicită, astfel încât rareori trebuie să se gândească la asta. Și Alexandru a spus, problema mea a fost că cl.exe necesită prezența explicită a acestui parametru în parametrizarea parametrul C.
Codul de corectat compilează toate compilatoarele testate acum, inclusiv cl.exe.
Alte posturi pe această temă: