Witam.
Mam takie oto makro:
#define ACTION(a,b,op) (a) = stos.top(); stos.pop(); \
(b) = stos.top(); stos.pop(); \
stos.push((b)op(a));
Czy da radę zrobić coś podobnego za pomocą funkcji? Nie korzystając z preprocesora.
Witam.
Mam takie oto makro:
#define ACTION(a,b,op) (a) = stos.top(); stos.pop(); \
(b) = stos.top(); stos.pop(); \
stos.push((b)op(a));
Czy da radę zrobić coś podobnego za pomocą funkcji? Nie korzystając z preprocesora.
funkcja np. tak:
template<class T>
T poptop(stack<T>& s)
{
T tmp = s.top();
s.pop();
return tmp;
}
najlepiej by było chyba zrobić swój własny stos który dziedziczyłby po tym stlowym i posiadałby podobnie działającą metodę
Chodziło mi raczej o to jak zastąpić ostatnią linijkę. W miejsce "op" wstawiam jakiś znak np. "+", "-", "*", nie bardzo wiem jak to zastąpić bez używania makra.
Możesz zrobić to albo, że podajesz tam wartość enum lub znak, ale musisz wtedy ręcznie uwzględnić każdy operator. Tak by się to działo automatycznie to się w C++ nie da (chyba, że byś dawał callbacki, ale to nie było by zbyt wygodne).