2011-06-22 7 views
0

次のようにコンパイルするのに問題があります(私は融合時に新しいです)。特に、 "_"(is_sameで)の出所がわからないのですか? boost :: lambdaから? Boost :: mpl?これをコンパイルするには何が必要ですか?ブースト融合質問

template <typename T> 
struct check 
{ 
    const T& value; 

    check(const T& v) : value(v) {} 

    template <typename X> 
    bool operator()(const fusion::pair<X,T>& data) const 
    { 
    return data.second == value; 
    } 
}; 

template <typename T1, typename T2, typename P> 
bool new_match(const P& p, const T2& values) 
{ 
    fusion::for_each(fusion::filter_if<boost::is_same<_, T2> >(p), check(values)); 
    return true; // not finished, just trying to compile 
} 

ありがとう!確かにthe fusion::filter_if documentationに示されているように、boost::mpl::_であることを意味するので、あなただけの#include <boost/mpl/placeholders.hpp>や資格やスコープに_を持って宣言を使用する必要がある必要があることを

答えて

3

はい、。

+0

私は唯一のポイントを読んで、導入の例を見た...私はfilter_ifのためのrefをチェックしなかった:-(ポインタのおかげで!:-) – Frank

+0

@フランク:いいえ心配。 : - ] Fusionのドキュメントは、MPLの深い先行知識を明示的に前提としており、多くの説明なしに両ライブラリのシンボルをしばしば組み合わせています。 – ildjarn