2017-11-20 11 views
0

私はArduinoのためCmdParserライブラリをダウンロードしていると私は、サンプルコードに次の行に渡って走っ:パラメータを<>で渡す?

CmdBuffer<32> myBuffer; 

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

私の混乱が<>(角括弧)についてです。私は#include <>のようなプロセッサディレクティブに<>が使われているのを見たことがありますが、<>がパラメータを渡すのに使われたことはありません。誰もこのコード行が実際に何をしているのかを簡単に説明し、自分で調べることができる場所を指摘できますか?

+8

これは、C++言語で開くことができるほど大きなワームの可能性があります:http://en.cppreference.com/w/cpp/language/template_parameters。ここに行く:-)。 –

+0

あなたの助けをありがとう – steamPickle

答えて

2

CmdBuffer < 32>では、角括弧は、対応するクラステンプレートのテンプレート引数を受け入れています。テンプレートは、クラス(または関数)を部​​分的に定義できるようにするC++の機能です。適切な引数が与えられると、テンプレートはクラスにインスタンス化されたとみなされ、クラスはオブジェクトをインスタンス化するために使用できます。

実行時に動的に提供できる関数パラメータとは対照的に、テンプレートパラメータはコンパイル時に認識されている必要があります。つまり、プログラムがすでに実行されていれば、const以外の変数を使用してCmdBufferをさまざまなサイズにインスタンス化することはできません。

クラステンプレートのパラメータは、型または値のいずれかです。たとえば、クラステンプレートベクトルを使用して可変サイズの値の配列を保持できますが、データ型が指定された後でなければなりません。

vector<int> aVectorOfInts; 

例では、クラステンプレートには型パラメータではなく値パラメータがあります。この値は、バッファーの静的配列のサイズを定義するために使用されています。コンパイル時に知っておく必要があります。

+1

あなたの助けに感謝 – steamPickle

関連する問題