Я использую компилятор i686-apple-darwin10-gcc-4.2.1 на OSX.6 (я обновил версию 10.5 и перенес предыдущий инструментарий dev).
Явключая эти библиотеки в мою реализацию:
#include <vector>
#include <boost/bind.hpp>
#include <boost/tuple/tuple.hpp>
У меня есть кортеж, который выглядит следующим образом:
typedef boost::tuple<double, unsigned long, unsigned long, char> myTupleType;
У меня есть вектор таких кортежей:
std::vector<myTupleType> theTupleVector;
У меня есть метод, который должен получать значения следующим образом:
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, и я следил за всей поддержкой и интернет-документацией, которую мог найти, пытаясь решить эту проблему.Как это решается?