Przekazanie zmiennej liczby argumentów do...

0

Witam.

Zastanawia mnie czy można (jeżeli tak, to jak?) przekazać funkcji (o nieznanej liczbie argumentów) nieznaną liczbę argumentów.

coś w tym stylu (pseudokod):

void funkcja2(inne arg, ...)
{
    //cos robi
}

void funkcja1(inne arg, ...)
{
    funkcja2(arg, ....);
}

i jej wywołanie:

funkcja1(jakies arg, "cyferka: %d", 5);

Myślałem nad tym chwilę i nie mam pojęcia jak to zrobić. Może ktoś zetknął się z tym problemem?

0

A może jako argument daj tablice.

0

A skąd bedziesz wiedział co z tymi nieznanymi argumentami robic jak ich jeszcze nie znasz :D

Możesz też przeładować funkcje np;

void funkcja1(int,char);
void funkcja1(int);
void funkcja1(int,int,int,float);
0
monsinior napisał(a)

Możesz też przeładować funkcje np;

Za duzo mozliwosci ;).

0

Inaczej takie przekazywanie można zrobić przez va_list, tak jak vprintf().

int vprintf (const char *template, va_list ap)

i np:.

void print(const char *str,...)
{
    va_list ap;
    va_start(ap,str);

    vsprintf(textbuffer,str,ap); // <-
    Print(textbuffer);

    va_end(ap);
}

W C++ można bardziej poszaleć z klasami...

A co chcesz w ogóle zrobić EM??

0

Gdyby to można zrobić na funkcjach przeciążonych, czy jakoś inaczej to już dawno bym to zrobił, ale tu nie o to chodzi. Mianowicie, mam bibliotekę, która posiada funkcję dajmy na to 'print1' drukującą na ekran tekst. I chcę na tą funkcję obudować własną 'print2', bo ta pierwsza np. nie ma sprawdzania długości tekstu etc. I właśnie o taki motyw mi chodzi, że wywołuję moją funkcję 'print2' on coś tam sobie robi dodatkowo, a następnie ona wywołuje tą 'print1'. A warunkiem jest to, że obie muszą mieć zmienna liczbę argumentów (tj. printf), i część argumentów musi "przejść" z 'print2' do 'print1'. I tu się robią schody bo nie wiem jak to zrobić :-/

0

C++ i trochę chamskie (kopiowanie stosu...) :)
http://www.codeproject.com/Purgatory/va_pass.asp

0

Dzięki. Ale jak nie można normalnie to trzeba młotkiem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1