2

テンプレート化されたフォームとテンプレート化されていないフォームの両方を持つクラスを持つことが可能かどうか、私は興味があります. 何かのようなもの:

SomeClass foo;
SomeClass<int> bar;

foo.do_something();
bar.do_something(5);

すべてを複数回定義しても問題ありませんが、同じクラス名を使用できるかどうかはわかりません。

4

2 に答える 2

3

簡単な答え: いいえ、許可されていません。コンパイラが表示する正確なエラー メッセージはさまざまですが、エラー メッセージが表示されるはずです。

ただし、テンプレートにデフォルトのパラメーターを指定できるため、次<>のように のみでインスタンス化できます。

template <class T=int>
class X {};

int main(){ 
    X<long> a;
    X<>     b; // used default, so equivalent to "X<int> b;"
}
于 2013-04-22T03:44:51.190 に答える
1

デフォルトのテンプレート パラメータを使用して、近いものを取得できます。

template <class T = char>
class SomeClass{};

SomeClass<> foo;     // char type
SomeClass<int> bar;  // int type

既定の型のメンバー関数に異なる動作が必要な場合は、特殊化を使用します。

于 2013-04-22T03:53:23.473 に答える