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>
私はこのようになりますタプルを持っています
値を取得するメソッドがあります。
私は、このような素晴らしいものを行うにしようとする3210template <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である、非常に特定のか? <未解決のオーバーロードされた関数型>は恐ろしい疑いがあり、 'std :: equal'を参照しています。 –
あなたはそれがstd :: equalを参照していることをどう思いますか?エラーを間違って読んでいますか? –
@Matthew第2引数の型( 'boost :: _ bi :: bind_t')は内部の' bind'の戻り値の型に似ているためです。 –