0

私はクラスを持っていますHelper

template <typename T, template <typename> E>
class Helper {
    ...
};

別のクラステンプレートがあります。これは、テンプレートテンプレートパラメータとして自分自身を渡しているときExposureに継承します。私も専門にする必要があります。したがって、私は次のようなものを書きたいと思います。HelperEExposure

template <>
class Exposure<int> : public Helper<int, Exposure> {
    Exposure() : Helper<int, Exposure>() {
        ...
    };
    ...
};

残念ながら、これはコンパイルされません。gccは文句を言う:

Exposure.h:170:エラー: `'template> class ExposureHelper'</p>のテンプレートパラメータリストの引数2でタイプ/値が一致しません

Exposure.h:170:エラー:タイプ''の定数が必要で、'Exposure'を取得しました</p>

私は何か間違ったことをしていますか?私がやろうとしていることの回避策はありますか?

4

2 に答える 2

2

クラスではなくテンプレートを本当に渡したい場合

template <typename T, template<typename> class E>
class Helper {
};

template <typename T>
class Exposure;

template <>
class Exposure<int> : public Helper<int, Exposure > {
};

またはあなたの意図が異なる場合

template <typename T, typename E>
class Helper {
};

template <typename T>
class Exposure;

template <>
class Exposure<int> : public Helper<int, Exposure<int> > {
};
于 2010-09-26T02:38:59.033 に答える
0

Helperの最初のテンプレートでは、2番目のパラメーターがテンプレートであると言う必要はありません。

template <typename T, typename E>
class Helper {
    ...
};

そして、引数としてテンプレートを使用して宣言することができます。

Helper<vector<int>, vector<char> > h;

しかし、2番目のテンプレートには、循環定義があります。露出クラスは、露出クラスによって異なります。これにより循環参照が作成され、Exposureから継承する前に、HelperクラスでExposureの定義が必要になります。クラスを再構築する必要があるかもしれません。

于 2010-09-26T02:35:09.937 に答える