私のプロジェクトの1つに、次のクラステンプレート階層があります。
template <typename FruitType, typename ParentFilterType = void>
class filter;
template <typename FruitType> // Specialization when no parent filter is needed
class filter<FruitType, void>;
どこFruitType
にでもあります。apple
、、banana
またはのいずれかであるとしましょうorange
。したがって、基本的に、afilter
は独自の親 filter
タイプを持つことができます。
私はコードを制御できません。コードはそのままにしてfilter
おく必要があります。
通常、ユーザーコードは次のようになります。
filter<apple, filter<banana, filter<orange> > > my_apple_filter;
明らかに、これは少し冗長です。もっと読みやすくすることは可能かと思いました。何かのようなもの:
complex_filter<apple, banana, orange>::type my_apple_filter;
どこcomplex_filter<apple, banana, orange>::type
に解決しますかfilter<apple, filter<banana, filter<orange> > >
。
内部をテンプレートにしcomplex_filter
てみましたが、今のところ成功していません。テンプレートパラメータの数は可変である必要があります(たとえば、1から5まで)。struct
typedef
似たようなものが必要になったことがありますか?どうすればそれができますか?
(残念ながら、C ++ 0xを使用することはできませんが、より良い解決策がある場合は、いつでも知っておくとよいので、遠慮なく投稿してください)
ありがとうございました。