私は C++ のテンプレートを注意深く研究してきましたが、テンプレートを使用して出現する可能性のあるすべての構文要素を明確に識別し、区別/明確化するための厳密な用語の確立されたセットがないように見えることは難しいと感じています。
たとえば、Josuttis と Vandevoorde のよく参照される (そして頼りになる) テンプレートに関する本、C++ Templates: The Complete Guideは傑出した本ですが、その本でさえ、テンプレートを含む各構文要素の厳密な用語を明確に識別していません。代わりに、意味は文脈から明らかです。
次の簡単な例を考えてみてください。これは、テンプレートに関連する 11 の関連する構文コンポーネントを強調していると思います。
#include <iostream>
#include <vector>
template
<
typename
M1, // <-- (1) "Primary template declaration template parameter
// identifier"
typename M2 // ditto
> // <-- (2) (entire <...> syntactic element) "Primary template declaration
// template parameter list"
class Foo
{
// <-- (3) "Primary class template definition"
};
template
<
typename
T1, // <-- (4) "Template specialization declaration template
// parameter identifier"
typename A1, typename M2 // ditto
> // <-- (5) (entire <...> syntactic element) "Template specialization
// declaration template
// parameter list"
class Foo
<
std::vector<T1, A1> &, // <-- (6) "Template specialization
// declaration TEMPLATE PARAMETER
// SPECIALIZATION ARGUMENT"
// (?)
M2
> // <-- (7) (entire <> syntactic element) "Template specialization
// declaration TEMPLATE PARAMETER
// SPECIALIZATION ARGUMENT LIST"
// (?)
{
// <-- (8) "Template specialization class definition"
};
int main()
{
Foo
<
std::vector<int> &, // <-- (9) "Template class instantiation
// template parameter"
// (?)
int // diito
> // <-- (10) (entire <> syntactic element) "Template class
// instantiation template
// parameter list"
// (?)
f; // <-- (11) "Template class instantiation instance variable name"
}
コード サンプルでは、テンプレートに関連する 11 の異なる構文要素を示し、各要素に厳密な分類ラベルを提案しました。
これらの要素のほとんどに正しい分類学的識別子を使用していると思います (ただし、間違っている場合は訂正してください)。
ただし、構文項目 (6)、(7)、(9)、および (10) はトリッキーです。たとえば、(6) と (7) の場合、テンプレートの特殊化の状況があり、ペアが山かっこのが2 回<>
現れるため、これら 2 つの非常に異なる山かっこのペアの山かっこの間に現れるパラメーター (引数?) を示すために使用される識別子には、分類上の区別が必要です。テンプレートのインスタンス化(9) および (10) には、さらに別の山括弧の使用が含まれているため、これらの括弧内に表示されるパラメーターには、独自の識別分類識別子も必要です。
おそらく、この質問では適切な厳密な用語を使用していますが、知りたいのは次のとおりです。
私が使用したものよりも簡単で厳密な用語はありますか?
識別ラベルに無関係な言葉や不必要な言葉を使用していませんか?
識別ラベルに欠落している単語はありますか?
私が使用した識別ラベルは正しいですか?