私のプロジェクトの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まで)。structtypedef
似たようなものが必要になったことがありますか?どうすればそれができますか?
(残念ながら、C ++ 0xを使用することはできませんが、より良い解決策がある場合は、いつでも知っておくとよいので、遠慮なく投稿してください)
ありがとうございました。