web-dev-qa-db-ja.com

C ++テンプレートクラスを前方宣言する方法は?

次のようなテンプレートクラスを指定します。

template<typename Type, typename IDType=typename Type::IDType>
class Mappings
{
public:
    ...
    Type valueFor(const IDType& id) { // return value }
    ...
};

ヘッダーファイルでこのクラスを誰かがどのように宣言できますか?

73
Tron Thomas

これはあなたがそれをする方法です:

template<typename Type, typename IDType=typename Type::IDType>
class Mappings;

template<typename Type, typename IDType>
class Mappings
{
public:
    ...
    Type valueFor(const IDType& id) { // return value }
    ...
};

デフォルトは、実際の定義ではなく、前方宣言にあります。

84
Pubby

テンプレートの最初の宣言に対してのみ、テンプレートのデフォルト引数を宣言できます。ユーザーにクラステンプレートの転送宣言を許可する場合は、転送ヘッダーを提供する必要があります。デフォルトを使用して他の人のクラステンプレートを前方宣言したい場合は、運が悪いです!

7
Dietmar Kühl