C++/CLIとC#では「ジェネリック」と呼び、Javaではそれを日本語に訳して「総称」と呼称しています。
| C++ | ≫テンプレート |
|---|---|
| C++/CLI |
generic<typename T> ref class MyClass
{
};
|
| C# |
class MyClass<T>
{
}
|
| Java |
class MyClass<E>
{
}
|
C++/CLIやC#では型変数に単純型 (基本型) を使用できるのに対して、Javaでは参照型しか認められません。これはC++/CLIやC#ではint型などの単純型の実体は、System.Int32構造体などのエイリアス (別名) にすぎないためです。
| C++/CLI | List<int> list = new List<int>(); |
|---|---|
| C# | List<int> list = new List<int>(); |
| Java | List<Integer> list = new List<Integer>(); |
テンプレートはC++とC++/CLIのみの機能です。
| テンプレート | ジェネリック | |
|---|---|---|
| 算術演算子の呼び出し | ○ | × |
template C<int i> {}などの非型テンプレート パラメーターの使用 |
○ | × |
| 明示的な特殊化 (特定の型のテンプレートのカスタム実装) のサポート | ○ | × |
| 部分的な特殊化 (型引数のサブセットのカスタム実装) のサポート | ○ | × |
| 型パラメーターのジェネリック型の基本クラスとしての使用 | ○ | × |
| 型パラメーターの既定の型への割り当て | ○ | × |
| ジェネリック型パラメーターのそれ自身のジェネリック化 | ○ | × |
| 有効ではない型パラメーターの使用 | ○ | × |
template<class T> class クラス名
{
}
template<typename T> 戻り値の型 関数名 ( 引数の型 引数名 )
{
}
※旧来のC++ではtypenameではなく、関数テンプレートもclassキーワードを使用していた。[ template<class T> ]