C++ - Variable Anzahl an Parametern übergeben

Hallo,
ich glaube mein Problem ist recht simpel, aber irgendwie finde ich da nicht so recht etwas mit google. :/
Es geht darum, eine variable Anzahl an Parametern an eine Funktion zu übergeben, die selbst auch eine variable Anzahl entgegen nimmt.
Hier mal ein Codeschnipsel:
Code:
switch ((int)header.size())
  {
  case 1: store = gtk_list_store_new (1, header[0].type); break;
  case 2: store = gtk_list_store_new (2, header[0].type, header[1].type); break;
  case 3: store = gtk_list_store_new (3, header[0].type, header[1].type, header[2].type); break;
//...
  }
So funktioniert es zwar, ist aber umständlich.
Mein ziel ist es eine Klasse zum verwalten von treeviews zu erstellen. Dafür muss ich aber auch einen List Store mit beliebig vielen Spalten erstellen können...

Ich hab das auch schon so probiert, nur mal so als Denkanstoß:
Code:
GType *headertypes = 0;
  headertypes = new GType [(int)header.size()];
  for (int i=0; i<(int)header.size(); i++)
	  headertypes[i] = header[i].type;
  store = gtk_list_store_new ((int)header.size(), (GType)headertypes);
  delete[] headertypes;
 
Zuletzt bearbeitet:
Meinst Du sowas wie StdArg in C (wobei man auch nach "vararg" suchen kann)? Vielleicht ist das auch ein besseres Beispiel dafür.
 
Also stehe ich jetzt auf dem Schlauch? Oo
Mit den Funktionen aus stdarg.h kann ich nur eine variable Anzahl entgegennehmen. Es geht mir aber um das Uebergeben.
Ich habe mal einen Codeschnipsel geschrieben, der verdeutlicht, was ich ueberhaupt machen will:
Code:
void some_function(int argument_count, ...)
{
    //Diehier repräsentiert die GTK Funktion. Die kann ich natuerlich nicht aendern..
    //Aber hier koennte man die Funktionen aus stdarg.h gebrauchen...
}

int main( int argc, char *argv[] )
{
    srand ( time(NULL) );
    int random_number = rand() % 3333 + 1;
    std::cout << "The random number is: " << random_number <<std::endl;
    std::vector<int> many_random_numbers;
    for (int i=0; i<random_number; i++) //Was in dem Vector so drinn steht ist fuer's Beispiel irrelevant...
        many_random_numbers.push_back(rand() % 654652 + 1); //... also voellig wilkuerlich :)

    //Hier meine, meines Erachtens sehr schlechte, Loesung, wie man die integers aus dem Vektor einzeln
    //uebergeben koennte:
    switch((int)many_random_numbers.size())
    {
    case 1: some_function(1,many_random_numbers[0]); break;
    case 2: some_function(2,many_random_numbers[0],many_random_numbers[1]); break;
    //usw... Wird bei 3333 etwas laenger werden... -> Mein Problem!
    }

    return 0;
}
 
Ist es nicht möglich some_function() mit einem Pointer oder Vector direkt zu füttern? Wenn du wie angegeben gtk_list_store_new verwendest, dann wechsel doch zu gtk_list_store_newv, da kannst dann ein Feld übergeben, so wie du es wohl anfangs selbst schon versucht hast. In deinem Fall wäre das eine bessere Lösung.
 
Hmm... Ja, so geht das wohl am einfachsten. Dann kann ich das ja im Prinzip so machen wie in meinem ersten Post dem zweiten Codeschnipsel, bis auf eine kleine Änderung:
Code:
store = gtk_list_store_newv ((int)header.size(), headertypes);
 
Zurück
Oben