[ itf @ 01.08.2006. 12:06 ] @
Može li mi itko na smislenom primjeru objasniti gdje se koristi predložak klase? Općenito, koristim predloške funkcija i znam čemu to, ali za predložak klase ne znam gdje to iskoristiti.
[ Časlav Ilić @ 01.08.2006. 12:52 ] @
Jedan primer koji je meni zatrebao, je tip matrice (u matematičkom smislu, znači sabiranje, množenje, itd.) sa proizvoljnim tipom elemenata — celi brojevi, racionalni (opet posebna klasa), u pokretnom zarezu sa različitom tačnošću...
[ itf @ 01.08.2006. 12:55 ] @
Opet mi se to čini da se može rješiti i predloškom funkcije...

Može li itko napisati ikakav primjer (programski kod) i na tome prikazati čemu to služi? Hvala
[ Časlav Ilić @ 01.08.2006. 13:03 ] @
Kako predloškom funkcije? Hoću da mogu da napišem nešto ovako:

Code:

Matrix<Rational> A(5);
Matrix<Rational> B(5);
...
Matrix<Rational> C = A * B;

[ itf @ 01.08.2006. 13:25 ] @
Ok, kužim.
[ NrmMyth @ 01.08.2006. 15:40 ] @
Jesi ikada vidio stl::containers
[ kiklop74 @ 01.08.2006. 16:13 ] @
Nabavi knjigu "c++ primer" od Stanley B. Lippman-a . Tu ti je sve do u sitna crveca objasnjeno.

[ X Files @ 01.08.2006. 16:31 ] @
Evo jedan primer, kada ja koristim "predložak klase", ako sam dobro shvatio
šta je predložak klase:

Na primer, jedna od cestih situacija u programiranju je:

Code:

ObjekatTipa1->Enabled = false;
ObjekatTipa2->Enabled = false;
ObjekatTipa3->Enabled = false;

UradiNesto();

ObjekatTipa1->Enabled = true;
ObjekatTipa2->Enabled = true;
ObjekatTipa3->Enabled = true;


E sad, ovde je problem sto ako nesto pukne u UradiNesto(), ni jedan Enabled = true
nece biti izvrsen. try/finally nije deo C++ jezika a u BCB-u i nije pouzdan. Poseban
slucaj je ako imas "return" negde ranije pa moras da vodis racuna da prethodno i
tu Enable-ujes objekte.

Tada se poseze za takozvanim RAII mehanizmom (kao kod std::auto_ptr) koji garantuje
da ce nakon izlaska iz scope-a biti izvrsen destruktor objekta.

Da ne bih pisao posebnu RAII klasu za svaki tip podataka, evo jednog resenja i to
za VCL, jer ga koristis:


--- H ---
Code:

template<typename TRAIIDisablerEnabler>class TRAII_DisableEnable
{
   TRAIIDisablerEnabler * AObjectToControl;

   public:
   TRAII_DisableEnable( TRAIIDisablerEnabler * ObjectToControl )
   {
      AObjectToControl = ObjectToControl;

      if( AObjectToControl )
      {
         AObjectToControl->Enabled = false;
      }
   }

   virtual ~TRAII_DisableEnable()
   {
     if( AObjectToControl )
       AObjectToControl->Enabled = true;
   }
};


--- CPP ---
Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TRAII_DisableEnable<TButton> E1( Button1 );
    TRAII_DisableEnable<TCheckBox> E2( CheckBox1 );

   // UradiNesto(); 
   Sleep( 3000 );

    // destruktor ce sve vratiti na mesto Enabled = true;
}

[ itf @ 02.08.2006. 07:56 ] @
Da... fora je u destruktoru. Hvala
[ kiklop74 @ 02.08.2006. 23:51 ] @
ako je predlozak - template sta je onda ulozak ?

Da cujem predloge :)