2016-11-24 1 views
1

Entschuldigung für die noob Frage. Ich war in der Vergangenheit in Java und das Buch für diesen Kurs behandelt nicht C++.... Operator in Funktion

Ich muss eine Funktion ausfüllen, um Schlüsselwörter (von Zeichenkettentyp) zu einem Item Objekt hinzuzufügen. Der Prototyp der Funktion ist wie folgt.

void addKeywordsForItem(const Item* const item, int nKeywords, ...); 

In Java ... gibt den Rest der Argumente als String Objekt und ich bin C++ Erraten etwas ähnliches tut, aber ich weiß nicht, der Name ... so danach zu suchen ist ziemlich schwierig.

Was ist ... genannt und was macht es?

+1

dies ... ist [variadische Argumente] (http://en.cppreference.com/w/cpp/language/variadic_arguments), 'catch (...) 'bedeutet fang alle Handler, und es bedeutet auch variadic Vorlage und seine Erweiterung – Danh

+1

Sie haben zwei miteinander in Verbindung stehende Fragen. Bitte wählen Sie einen aus. Sie können Ihre andere Frage separat veröffentlichen. – hvd

+1

Okay, für die '...', die Antwort, die Sie bekommen haben, ist richtig, aber jetzt, wo Sie wissen, was Sie suchen, lesen Sie bitte auch, warum Sie in der Regel nicht variadic Funktionen in modernen C++ verwenden sollten insbesondere die mangelnde Typsicherheit. Wenn Sie eine Menge von Strings erhalten möchten, verwendet der grundlegende typsichere Ansatz 'void addKeywordsForItem (const Item * const item, std :: initializer_list keywords)' (zu nennen als 'addKeywordsForItem (item, {" a ", "b", "c"}) '), aber auch fortschrittlichere Ansätze, die mehr Variationen beim Aufruf der Funktion erlauben, sind ebenfalls möglich. – hvd

Antwort

2

Was ist ... genannt und was macht es?

Es gibt mehrere Orte, wo ... in C++ verwendet wird. Der Kontext, in dem Sie es verwenden, heißt variadic arguments.

Die Standardkopfzeile cstdarg enthält einen Typ und Makros, mit denen Sie bestimmte Argumente aus Variadic-Argumenten extrahieren können.

Beispielcode aus http://en.cppreference.com/w/cpp/utility/variadic/va_start:

#include <iostream> 
#include <cstdarg> 

int add_nums(int count, ...) 
{ 
    int result = 0; 
    va_list args; 
    va_start(args, count); 
    for (int i = 0; i < count; ++i) { 
     result += va_arg(args, int); 
    } 
    va_end(args); 
    return result; 
} 

int main() 
{ 
    std::cout << add_nums(4, 25, 25, 50, 50) << '\n'; 
} 
+0

Wow, ich wünschte, der Lehrer hätte das notiert. Vielleicht fügen Sie den Beispielcode hier zu Ihrer Antwort für jemand anderen hinzu, der sich das anschaut? http://en.cppreference.com/w/cpp/utility/variadic/va_start –

Verwandte Themen