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>
]