2010-12-31 9 views
2

私は通常のboost mplでうまく動作するメタプログラムを持っています。それは次のようになります。mplスタイルcopy_if可変テンプレートベクトルのメタ関数

template <class Vector, class ResultKind, class Custom> 
struct FilterChildrenIfNotOk 
{ 
    typedef typename 
    copy_if<Vector, 
      or_<is_same<boost::mpl::placeholders::_1, ResultKind>, 
       IsOk<boost::mpl::placeholders::_1, 
        ResultKind, 
        Custom> > >::type type; 
}; 

私はvariadicテンプレートベクター(mpl :: vector)を使用してそれをコンパイルしようとしています。そのために、私はここにある可変テンプレートテンプレートの実装を使用しています:

いくつかのテストがありますが、repoでcopy_if、remove_if、およびcount_ifの使用可能な実装が見つかりませんでした。それらのメタプログラムはありますか?私はそれらを見つけることができません。代わりに、mplプレースホルダもサポートするように、そのうちの1つを実装するのを手伝ってください。あなたの助けを前もってありがとう。

答えて

1

ヒントから始めましょう:折りたたみは方法よりも強力でしょう。たとえば、シーケンス内の要素の数をカウントするには、foldを初期状態0で適用し、状態(これまでの要素の数)と要素をとり、戻り値をthe_state + 1とする関数を適用するだけです。

今はcount_ifと書くことができますか? (明らかにfoldを使用して)

あなたが成功するまで私があなたを助けます。

関連する問題