[ erno @ 12.06.2006. 12:30 ] @
pozdrav ljudi,

posto nikad nisam imao priliku da radim sa macros (ne preprocessori) odlucio sam da zamolim za pomoc. imam aplikaciju koju sam vec implementirao i sad trebam da ubacim macros u aplikaciju ciji bi zadatak bio npr. kad korisnik zada mb (macro begin) da od tad pocne da radi macro i onda korisnik zadaje operatare npr. +,-,*,/ (chars vidi kasnije) i onda trebam reci: me (macro end). sad korisnik opet ima normalni command line gdje moze pozvati direktno neku od operacija ili staviti broj na stack. znaci:

mb
+
-
*
me
3.4
2.1
5.7
4
cm

gdje je cm (call macro) nakon cega se pozivaju operacije koje sam unio dok je bio macro aktivan. thnx za svaku pomoc.

pozdrav,
erno
[ vladab @ 12.06.2006. 16:15 ] @
POgledaj na adresi http://ri4sp.etf.bg.ac.yu tu imas neke materijale u kojima se obradjuje rad sa makrioma.
[ Goran Arandjelovic @ 12.06.2006. 21:27 ] @
Što se tiče dobre implementacije ovoga što želiš, pročitaj nešto o Command pattern-u.
Veoma lepo je opisano kako dinamički možeš kreirati niz "operacija".

Prezumi knjigu Thinking in C++, Volume 2 - Practical programming ovde i nađi poglavlje Design Patterns, a zatim i gore pomenuti pattern.

Pozdrav.
[ erno @ 15.06.2006. 16:05 ] @
command pattern sam vec isprogramirao pa me i zanima da li macro treba da bude jedna od komandi ili ne. jos jedna stvar, dali je moguce kopirati jedan stacjk u drugi. imam sljedeci slucaj, imam jednu klasu npr. AddOperation koja je izvedena iz klase Operation i ta klasa prima stack na kojem su brojevi. moj kalkulator treba da cita prva dva unesena broja i ja trebam iscitati zadnja dva. ja sam to ovako zamislio, imam jednu metodu koja ce napraviti clone od stacka i i onda kazem nr2 = stack.top() i nr1 = stack.top() i ovdje iscitam zadnja dva broja i opet vratim ostatak u izvorni stack. postojili neki nacin mogu reci stack2=stack1. otprilike ovako:

Code:


void MathOperation::getLastTwoElementsFromStack(CalculatorStack *my_stack)
{
   CalculatorStack temp;
   
   for(int i=0; i < my_stack->getSize();i++)
      temp.push(my_stack->top()); // ovdje se iscita vrijednost koja se nalazi na my_stack ali je ne brise sa stacka.
      // problem je u tome da predajem preko jednog pointera, dakle treba mi pointer na pointer jer prenosim stack sa jedne funkcije na drugu
      // to sam vec jednom morao raditi. imali neko elegantnije rjesenje da iscitam zadnja dva broja???
    
   // sad na stacku imam samo zadnja dva broja i njih iscitam to je to....
}



hvala za odgovore