Ahoj,
řeším školní úlohu v C++ a bohužel se mi nedaří přijít na nějaký inteligentní nápad řešení, google také pod mými dotazy mlčí.
Zadání je: Naimplementujte vlastní šablonu ve stylu STL (např. vector), ale nepoužívejte přitom příkaz template.
Zkusil jsem na to jít cestou třídy "vektor" s virtuální funkcí push_back, od ní podědit příslušnou třídu pro vybrané typy - integer, char, atd. napr. class vektor_char : public vektor, vektor_int:public vektor. V kazde z nich pak pretizit operator [] vzdy pro prislusny datovy typ. Nicmene s timto resenim jsem neuspel - STL pracuje univerzalne a nemusis premyslet, kterou tridu pouzit.
Dokazete prosim nekdo poradit? Je nejaka moznost napr. na datovy kontejner, aniz bych pouzil STL?
Dekuju,
Petr
Fórum › C / C++
Templates - implementace funkcionality
Zdravím,
opravdu to zadání znělo:
Naimplementujte vlastní šablonu ve stylu STL (např. vector), ale nepoužívejte přitom příkaz template.
Totiž nějak si to protiřečí. Jak máš vytvořit _šablonu_ bez použití klíčového slova template?
Pokud to opravdu znělo takto, tak to už samo o sobě něco vypovída o kvalitě učitele.
Jestli tím nechtěl říct abys neuříval dědičnost ze stávajících šablon, jako že nemyslel příkaz template ale jakýkoliv stávající šablony, abys je nemohl jen rozšiřovat.
Lze udělat objekt, který se bude chovat jako šablona s princily STL bez použití klíčového slova template, ale to prostě není šablona jen objekt se stejným chováním.
To Linnest : Ono to zadání jsem trochu zkrátil, ta "šablona" byla zavádějící, myšlena byla funkcionalita šablony. Pokud by byla možnost použít "template", tak se to dá naimplementovat docela snadno. Ale mám obavy, že to není tento případ. Mě spíš šlo o to, jestli nejde nějakou "fintou" dosáhnout toho, abych mohl pracovat s generickými parametry, aniž bych používal klíčové slovo template. Např. struktura bude mít ve vstupních parametrech typ int, přičemž adekvátně si podle toho nastavím všechny proměnné v rámci této struktury.
Děkuju všem za postřehy! Tenhle příklad je bezpochyby v praxi k ničemu a má ilustrovat, že jsem pochopil sílu šablon a vím co nahrazují :o)
To Petr : Napadá mě několik způsobů, jak tuhle divou úlohu řešit.
První. Můžeš to celé naprogramovat v preprocesorových makrech, jako jeden z parametrů předáš i typ a ten pak v těle makra nahradíš u příslušných deklarací proměnných a návratových hodnot.
Druhý. Napíšeš normální třídu pro kontejner, akorát místo specifickýho typu dat budeš používat pointer na void, v konstruktoru si pak předáš velikost toho typu, tak si buděš moct alokovat paměť, aniž bys znal přesný typ. Dokonce nad tím snadno půjde vyrobit i iterátor. A kdybys chtěl mít nad daty nějaké uspořádání, tak požádáš uživatele o pointer na funkci (v c++ aka funktor), která to uspořádání implementuje. Nevýhoda tohoto řešení je, že budeš muset všechny data z kontejneru přetypovávát zpět na správný typ.
... a nebo můžeš použít kombinaci obou, tedy třídu s void* a nějaká proxy makra, která provedou type casting za tebe.
Moje poznámka: tohle je sice krásná úloha jak řešit šablony v pure C, do C++ ale tyhle postupy prostě nepatří. Programátoři by se měli vyvarovat míchání přístupů obou jazyků, byť dle normy je C syntakticky (skoro) podmnožinou C++.
To ian : Druhé řešení mi dává hodně velký smysl, zkusím si s tím trochu pohrát. Tahle možnost mě nenapadla ani se mi to nepodařilo najít. Děkuju moc za radu!!!
Jestli budu mít chvíli, zkusím zagooglit i na ty preprocesorová makra, nicméně abych řekl pravdu, aktuálně je to pro mě naprosto neznámé území.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Free Cscart templates|Magento Templates|Wordpress templates|Joomla T… — založil caxidtemplates
Nastavení funkcionality mailboxu JavaScriptem — založil Goran
Flash templates — založil PDyawisko
[Python] generovat tabulku z listu s použitím Jinja templates — založil itlady
Moderátoři diskuze