提升绑定到vector的成员函数

时间:2012-05-05 20:19:53

标签: c++ boost lambda

请帮我处理以下代码。我需要在向量中添加字符串长度。我不知道如何用boost来实现它。到目前为止,我最好的想法是:

boost::bind(add2Vect, boost::ref(lengths), L::_1)

其中add2Vect是一个简单的函数,它接受一个向量,一个字符串并将该字符串的长度添加到向量中。 L只是boost :: lambda

的简写

但是这个解决方案很糟糕,因为我必须创建一个离散函数。那不是lambdas应该是什么。

代码:

vector<string> strings;
strings.push_back("Boost");
strings.push_back("C++");
strings.push_back("Libraries");

vector<int> lengths;

for_each(strings.begin(), strings.end(),    
    // add lengths of strings to the vector 'lengths'

);

for_each(lengths.begin(), lengths.end(), 
    cout << L::_1 << " "
);  

1 个答案:

答案 0 :(得分:2)

Boost.Bind和Boost.Lambda不是一回事。除非使用boost :: lambda :: bind。

,否则不能在bind中使用lambda占位符

以下是您如何做您想做的事情:

std::transform(strings.begin(), strings.end(), std::back_inserter(lengths), 
               boost::bind(&std::string::size, _1));

如果你真的必须使用for_each:

std::for_each(strings.begin(), strings.end(), 
             boost::bind(&std::vector<int>::push_back,
               &lengths, boost::bind(&std::string::size, _1)));

但你应该使用size_t而不是int。