2011-07-26 15 views
1

OSX.6でi686-apple-darwin10-gcc-4.2.1コンパイラを使用しています(10.5をアップグレードして持ち越しました以前の開発ツールキット)。 I私の実装では、これらのライブラリを含むてるboost :: bindを使用してboost :: tuple要素にアクセスできません

std::vector<myTupleType> theTupleVector; 

typedef boost::tuple<double, unsigned long, unsigned long, char> myTupleType; 

私は、このようなタプルのベクトルがあります

#include <vector> 
#include <boost/bind.hpp> 
#include <boost/tuple/tuple.hpp> 

私はこのようになりますタプルを持っています

値を取得するメソッドがあります。

私は、このような素晴らしいものを行うにしようとする3210
template <typename T,int i> 
class accessTupleElement 
{ 
public: 
    typedef typename boost::tuples::element<i,T>::type result_type; 

    template <typename U> result_type operator()(const U& u) const 
    { 
    // Select the ith element of the tuple T and return it 
    return boost::get<i>(u); 
    } 
}; 

std::find_if(startIter, endIter, boost::bind(std::equal<unsigned long>, boost::bind(accessTupleElement<myTupleType, 1>(), _1), 123L)); 

startIterとendIterはタプルの私のベクトルの開始と終了です。私はこれが関数オブジェクトをイテレータの値でバインドし、タプルの目的の値に評価し、それを123と比較することを前提とします。

私の内なるバインドに関する次のエラーメッセージが表示されます:

no matching function for call to 'bind(<unresolved overloaded function type>, boost::_bi::bind_t<boost::_bi::unspecified, accessTupleElement<boost::tuples::tuple<double, long unsigned int, long unsigned int, char, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>, 1>, boost::_bi::list1<boost::arg<1> > >, boost::arg<2>&)' 

コンパイラはどのように混乱することがありますか? accessTupleElementという識別子が1つしかありません。私はこれを解決しようとしているすべてのブーストとインターネットのドキュメントに従ってきました。これはどのように解決されますか?

+1

あなたは問題があなたの内側のバインド・コールではなく、外側の1である、非常に特定のか? <未解決のオーバーロードされた関数型>は恐ろしい疑いがあり、 'std :: equal 'を参照しています。 –

+0

あなたはそれがstd :: equalを参照していることをどう思いますか?エラーを間違って読んでいますか? –

+0

@Matthew第2引数の型( 'boost :: _ bi :: bind_t')は内部の' bind'の戻り値の型に似ているためです。 –

答えて

1

変更

std::equal<unsigned long> 

std::equal<unsigned long>() 

まあ、std::equal

に関数テンプレート、したがって、エラーメッセージです。おそらく std::equal_toを望んでいたので、以下を使用します。

std::equal_to<unsigned long>() 
+0

最初に間違っていて、2番目が間違っている理由を説明できますか? – Eelke

+0

いいえ、 "equal() 'と一致する関数がありません" –

+0

@Matthew Fixed。 –

関連する問題