2

通常のブースト mpl で正常に動作するメタ プログラムがあります。次のようになります。

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;
};

可変個引数テンプレート ベクトル (mpl::vector) を使用してコンパイルしようとしています。そのために、ここにある可変個引数テンプレート ベクトルの実装を使用しています: https://svn.boost.org/svn/boost/sandbox/variadic_templates

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

4

1 に答える 1

1

ヒントから始めましょう。fold は、思っているよりもはるかに強力です。たとえば、シーケンス内の要素の数を数えることfoldは、初期状態 0 と、状態 (それまでの要素の数) と要素、および return を受け取る関数を適用するだけで構成されthe_state + 1ます。

count_ifたとえば、次のように書くことができますか? (fold明らかに使用)

うまくいかない場合は、成功するまでお手伝いします。

于 2011-01-06T00:40:45.883 に答える