Sablonok, mint a sablon paraméterei

Van egy C ++ template érdekes lehetőség paraméterezni magukat sablonparaméterekhez. Így jelent ez?

Vannak esetek, amikor a sablon paraméter önmagában egy sablon osztály, valamint meg kell adni a beállítást annak példányosítás. Például a generikus gyógyszerek funkcióval nyomtathat egy szabványos konténer bármilyen a falon:

És minden semmi, csak a szintaxis C ++, ez nem igaz. Nem lehet csak levelet C. ha E önmagában nem egy bizonyos típusú, és a sablon paraméter. A helyes módja, hogy egy sablonparaméterrel, ami viszont függ más paramétert kell kinéznie:

Most teljes példa (template_parameter.cpp):

És futtassa a lefordított fájlt:

Világosan látható, hogy az első sorban nyomtatott számok, a második anyag, a harmadik jel és a negyedik sor.

template_as_parameter.cpp (38). error C3208: 'print'. template paraméter lista osztály sablon „std :: vector” nem egyezik sablonparaméterrel lista sablon sablon paraméter a „C”

Amiből én arra a következtetésre jutott, hogy a Microsoft fordító nem támogatja a hasonló szintaxis.

Nagyon csalódott voltam ebben a tényt, mint egész nagyon pozitív hozzáállás cl.exe. És akkor kiderül, hogy még borlandovy fordító megérti és cl.exe sem. Ha valaki tudja, hogy van egy titkos kulcsot, hogy támogatja a „trükkös és ritka” lehetőségeit C ++ fordítóprogram Microsoft - tanítani magát. Én is nagyon hálás.

Készüljünk kérdésekre, mint „miért olyan nehéz, de még mindig rosszul tolerálható” - minden igaz. Személy szerint szeretném megemlíteni az összes fent leírt a „sötét sarkait” C ++, de nem volt túl érdekes neki mászni.

A sablon standard tartályok egy második lehetőséget, az úgynevezett lefoglaló. Ez a lehetőség gyakran használják az alapértelmezett érték, így ritkán kell gondolni. És Alexander azt mondta, a probléma az volt, hogy cl.exe igényel kifejezett jelenléte ezt a paramétert a paraméter C paramétereket.

A korrigált kód lefordítja az összes vizsgált fordítóprogramok most többek cl.exe.

További bejegyzések a témában:

Kapcsolódó cikkek