我正在使用boost :: range和boost :: lambda,使用以下示例来比较两个数字并获取具有相同数字的元素。
#include <iostream>
#include <boost/optional.hpp>
#include <boost/range/algorithm/find_if.hpp>
#include <boost/typeof/typeof.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/utility/compare_pointees.hpp>
template <class Range, class Predicate>
boost::optional<typename boost::range_value<Range>::type>
search_for(const Range& r, Predicate pred)
{
BOOST_AUTO (it, boost::find_if(r, pred));
if (it == boost::end(r))
return boost::none;
return *it;
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
int d = 3;
std::vector<int*> m = {&a, &b, &c};
if (boost::optional<int*> number =
search_for(m, boost::equal_pointees(???, &d))) {
std::cout << "found:" << (*number.get()) << std::endl;
}
else {
std::cout << "not found" << std::endl;
}
}
我应该在???
函数中使用search_for
以上的内容?
我相信它可能很简单,但不知道该怎么做。我可以使用boost :: bind或std :: bind2d等进行比较,但正在考虑是否有任何优雅的方法来做到这一点。此外,这个代码示例可以重构为更简单的一个,但我只是在学习。
答案 0 :(得分:1)
使用boost :: lambda,它看起来像这样:
namespace ll = boost::lambda;
search_for(m, *ll::_1 == d)
这比指向d
的指针复杂得多,因此您可以使用equal_pointees
。