Avatar billede krismort Nybegynder
21. august 2002 - 21:55 Der er 8 kommentarer og
2 løsninger

funktion med n-antal par??

Er det muligt og hvis ja hvordan??? kan man så lave en funktion der kan tage imod et ukendt antal parametre af ukendt type og derefter behandle hver enkelt parmeter en efter en.

Kristian
Avatar billede wisen Nybegynder
22. august 2002 - 08:19 #1
Prøv at tygge lidt på det har... i princippet burde du kunne bruge void* i stedet for konkrete typer

/Wisen
Avatar billede wisen Nybegynder
22. august 2002 - 08:19 #2
Avatar billede kamikaze Nybegynder
22. august 2002 - 12:44 #3
Jeps, du kan bruger (...) til at angive et ukendt antal parametre
Avatar billede krismort Nybegynder
22. august 2002 - 20:01 #4
wisen: Ja man kan helt sikkert bruge argumentlister som en løsning problemet argumentlisterne er at man skal vide hvilken type variabler man smider ind i dem før man kan behandle dem.
hvis du feks har input værdierne 123, "asd", 122 så kan du ikke undersøge hvilke paramerer der er af forskellig type inden du behandler dem... et betyder at hvis du vælger og behandle dem som int's så opstår der en fejl når den kommer til parameter 2 ... som er af typen char*
Hvis bare man kunne undersøge hvilken type parametren var af inden man kaldte va_arg
Avatar billede krismort Nybegynder
22. august 2002 - 20:05 #5
redigeret version: :p

Wisen:
Ja man kan helt sikkert bruge argumentlister som en løsning.
Problemet med argumentlisterne er bare at vi SKAL vide hvilken type variabler man smider ind i dem før vi kan behandle dem.
Hvis du feks. har input func(3, 123, "asd", 122) så er problemet at vi ikke kan undersøge hvilke type de forskellige paramerer før vi behandler dem...
Det betyder at hvis du vælger og behandle dem som int's så opstår der en fejl når den kommer til parameter 2 ... der er af typen char*

Hvis bare man kunne undersøge hvilken type parametren var af inden man kaldte va_arg så ville det være perfekt!

Kristian
Avatar billede wisen Nybegynder
23. august 2002 - 08:28 #6
EEn mulighed var at bruge typen "_variant_t".... ved ikke om du kender den ?
Avatar billede krismort Nybegynder
23. august 2002 - 18:35 #7
Nej jeg kender den ikke, men det lyder da meget interessant.
Kan du ikke komme med et eksempel ?

Kristian
Avatar billede wisen Nybegynder
24. august 2002 - 09:36 #8
Hmm; det kunne være noget i stil med...

#include <stdarg.h>
#include <comdef.h>

void Dillerdaller( _variant_t first, ... )
{
  _variant_t Variant = first;

  va_list marker;

  va_start( marker, first );    /* Initialize variable arguments. */

  while( Variant.vt != VT_EMPTY )
  {
        switch( Variant.vt )
        {
            case VT_BSTR:
            {
                // værdien er en string...
            }
            case VT_I4:
            {
                // værdien er en integer...
            }
        }

      Variant = va_arg( marker, _variant_t );
  }

  va_end( marker );              /* Reset variable arguments.      */
}

int main(int argc, char* argv[])
{
    _variant_t v1 = _variant_t((long) 1);
    _variant_t v2 = _variant_t("Dillerdaller");

    Dillerdaller( v1, v2 );

    return 0;   
}
Avatar billede krismort Nybegynder
24. august 2002 - 20:47 #9
Det ser jo ikke dårligt ud :) du skal have 1000 tak for din hjælp.
Man skal dog lige huske at afbryde loopet inden den når til sidste argument i argumentlisten.

Hvis der er nogen som gerne vil vide det så kan man gøre det ved at bruge en nVar som første variabel istedet for first og afbryde loopet når man har kaldt
Variant = va_arg( marker, _variant_t );
nVar gange

Kristian
Avatar billede wisen Nybegynder
26. august 2002 - 08:21 #10
God fornøjelse; Takker for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester