テンプレート化されたフォームとテンプレート化されていないフォームの両方を持つクラスを持つことが可能かどうか、私は興味があります. 何かのようなもの:
SomeClass foo;
SomeClass<int> bar;
foo.do_something();
bar.do_something(5);
すべてを複数回定義しても問題ありませんが、同じクラス名を使用できるかどうかはわかりません。
簡単な答え: いいえ、許可されていません。コンパイラが表示する正確なエラー メッセージはさまざまですが、エラー メッセージが表示されるはずです。
ただし、テンプレートにデフォルトのパラメーターを指定できるため、次<>
のように のみでインスタンス化できます。
template <class T=int>
class X {};
int main(){
X<long> a;
X<> b; // used default, so equivalent to "X<int> b;"
}
デフォルトのテンプレート パラメータを使用して、近いものを取得できます。
template <class T = char>
class SomeClass{};
SomeClass<> foo; // char type
SomeClass<int> bar; // int type
既定の型のメンバー関数に異なる動作が必要な場合は、特殊化を使用します。