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
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: