0

Baseクラス用に明示的にインスタンス化されているが、クラス用にはインスタンス化されていないテンプレート関数がありますDerivedDerivedクラス(または他の派生クラス)を渡す使用をクラスと一致させるにはどうすればよいBaseですか?

ヘッダーファイル:

class Base {
};
class Derived : public Base {
};
class Derived2 : public Base {
};

template <typename Example> void function(Example &arg);

実装ファイル:

// Explicitly instantiate Base class:
template void function<Base>(Base &arg);

// Define the template function:
template <typename Example> void function(Example &arg) {
  // Do something.
}

Derivedまたはの関数を明示的にインスタンス化していないため、未定義の参照を取得しますが、明示的に定義されているクラスDerived2に対してバインドしたいと思います。Base

C ++-03を使用してBaseから派生したすべてのオブジェクトについて、テンプレートを強制的にBaseクラスに解決するにはどうすればよいですか?

DerivedクラスをBaseクラス定義に特化して、どうにかしてそれを行うことはできますか?

4

1 に答える 1

4

どうですか:

template <> void function(Derived &arg)
{
     function<Base>( arg );
}

編集: ascheplerが提案したように、関数のオーバーロードでこれを行うこともできます:

void function(Derived &arg)
{
     function<Base>( arg );
}

概念的には同じですが、同意しますが、わずかに優れています:)

于 2013-01-30T20:04:39.593 に答える