我的以下程序给出了大量错误,我试图在noost lambda表达式中使用operator []。请建议在lambda中使用重载运算符的方法
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/algorithm.hpp>
#include <boost/lambda/if.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/assign/std/vector.hpp>
using namespace std ;
using namespace boost ;
using namespace boost::lambda ;
using namespace std ;
using namespace boost::assign ;
int main()
{
vector<int> nums ;
nums += 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;
vector<int> flags(11, 0) ;
cout << "Input Vector : "<<endl ;
copy(nums.begin(), nums.end(), ostream_iterator<int>(cout, " ")) ;
cout << endl ;
for_each(nums.begin(), nums.end(),
if_then(_1%2 == 0, bind(&vector<int>::operator[], var(flags), _1)=1)) ;
cout << "Flag Vector : "<<endl ;
copy(flags.begin(), flags.end(), ostream_iterator<int>(cout, " ")) ;
cout << endl ;
return 0 ;
}
答案 0 :(得分:0)
vector<int>::operator[]
已超载。
reference operator[] (size_type n);
const_reference operator[] (size_type n) const;
除了已知函数类型的有限数量的上下文之外,您不能获取重载函数的地址(成员与否)。
您可以使用显式类型转换来选择正确的函数:
boost::lambda::bind((vector<int>::reference (vector<int>::*)(vector<int>::size_type))(&vector<int>::operator[]), var(flags), _1);
看起来很糟糕?那是因为它是。使用C ++ 11及其内置的lambda并忘记bind
就像一场噩梦。