2017-11-20 1 views
0

Ich habe die CmdParser Bibliothek für Arduino heruntergeladen und ich auf den folgenden Zeilen in dem Beispielcode lautete:Parameter mit <> übergeben?

CmdBuffer<32> myBuffer; 

CmdCallback<5> myCallback; // Object for handling 5 function in SRAM 

Meine Verwirrung ist in Bezug auf die <> (spitzen Klammern). Ich habe <> auf Prozessor-Direktiven verwendet, wie #include <>, aber ich habe nie <> verwendet, um Parameter zu übergeben. Kann jemand eine kurze Erklärung dafür geben, was diese Codezeilen eigentlich bewirken, und mich auf einen Ort hinweisen, an dem ich das selbst erforschen kann?

+8

Dies ist so viel wie eine Dose Würmer, wie Sie in der Sprache C++ öffnen könnten: http://en.cppreference.com/w/cpp/language/template_parameters. Hier gehst du :-). –

+0

danke für deine hilfe – steamPickle

Antwort

2

Im Kontext von CmdBuffer < 32> akzeptieren die spitzen Klammern Template-Argumente für eine entsprechende Klassenvorlage. Vorlagen sind ein Merkmal von C++, das es ermöglicht, eine Klasse (oder Funktion) teilweise zu definieren. Wenn geeignete Argumente angegeben werden, wird davon ausgegangen, dass die Vorlage in eine Klasse instanziiert wird, und die Klasse wiederum kann zum Instanziieren eines Objekts verwendet werden.

Im Gegensatz zu Funktionsparametern, die zur Laufzeit dynamisch bereitgestellt werden können, müssen die Template-Parameter zur Kompilierzeit bekannt sein. D. h., Sie können eine nicht konstante Variable nicht verwenden, um CmdBuffer in verschiedene Größen zu instanziieren, wenn das Programm bereits ausgeführt wird.

Die Parameter einer Klassenvorlage können entweder Typen oder Werte sein. Zum Beispiel kann der Klassenvorlagenvektor verwendet werden, um Variablengrößenfelder zu halten, aber nur nachdem ein Datentyp bereitgestellt wurde.

vector<int> aVectorOfInts; 

In Ihrem Beispiel hat die Klassenvorlage einen Wertparameter und keinen Typparameter. Der Wert wird verwendet, um die Größe des statischen Arrays für den Puffer zu definieren. Es muss zum Zeitpunkt der Kompilierung bekannt sein.

+1

danke für deine hilfe – steamPickle

Verwandte Themen