boost::bind and boost::lambda
От: Аноним  
Дата: 13.04.06 08:13
Оценка:
здравствуйте.

у меня такой вопрос, почему не копиляется следующий код:


std::map<std::string, int> algPars;
std::for_each(algPars.begin(), algPars.end(), boost::bind(atoi, _1->first.c_str()));


пример бессмысленный, меня интересует почему он не компиляется.

и ещё примерчик
namespace lmbd = boost::lambda;
std::vector<int> intarray(10);
boost::function<void(int)> op2 = (std::cout << intarray[lmbd::_1]);
op2(2);

тоже не хочет компилиться

подскажите пожалуйста. заранее спасибо.
Re: boost::bind and boost::lambda
От: Bell Россия  
Дата: 13.04.06 09:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>здравствуйте.


А>у меня такой вопрос, почему не копиляется следующий код:

А>
А>std::map<std::string, int> algPars;
А>std::for_each(algPars.begin(), algPars.end(), boost::bind(atoi, _1->first.c_str()));
А>


Потому что, как это ни прискорбно, синтаксис такого не позволяет. Так что все несколько сложнее

std::map<std::string, int> algPars;
   typedef std::map<std::string, int>::value_type vt;
   std::for_each(algPars.begin(), algPars.end(), 
      boost::bind(atoi, 
         boost::bind(&string::c_str, 
            boost::bind(&vt::first, _1)
         )
      )
   );


А>и ещё примерчик

А>
А>namespace lmbd = boost::lambda;
А>std::vector<int> intarray(10);
А>boost::function<void(int)> op2 = (std::cout << intarray[lmbd::_1]);
А>op2(2);
А>

А>тоже не хочет компилиться

Функтор создается вот так (static_cast из-за перегрузки):
(std::cout << lmbd::bind(static_cast<int& (std::vector<int>::*)(size_t)>(&std::vector<int>::operator[]), 
      intarray, lmbd::_1));

но какой у него тип, и как это присвоить boost::function, я ответить затрудняюсь...
Любите книгу — источник знаний (с) М.Горький
Re[2]: boost::bind and boost::lambda
От: corben  
Дата: 13.04.06 10:51
Оценка:
спасибо большое. хотя вопрос со вторым примером конечно остался открытым . я попытался что-то сделать с учетом предложенной конструкции но не получилось.
это я был аноним .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.