我将 copy_if 绑定到将接受一对迭代器的函数对象中。我有一个警告,我要返回本地地址或临时地址。
据我所知,它来自于 std::pair 迭代器的绑定成员变量,但我不知道如何纠正它。我不明白为什么他们首先被认为是临时的。有人可以向我解释一下吗?
这是相关的代码。环境是 Visual Studio 2010 Ultimate,不太有用的是 Windows 7 Enterprise。
std::vector<My_Type *> destination_container;
typedef /*A boost multi index iterator that dereferences to a 'My_Type *' */ t_range_iterator;
typedef std::pair<t_range_iterator, t_range_iterator> t_equal_range;
typedef std::function<bool(My_Type *)> t_predicate;
typedef std::back_insert_iterator<std::vector<My_Type *>> t_inserter;
t_predicate predicate(std::bind(&My_Type::pred, std::placeholders::_1, SOME_CONST));
std::function<t_inserter(const t_equal_range)> do_copy_from(std::bind(&std::copy_if<t_range_iterator, t_inserter, t_predicate>
, std::bind(&t_equal_range::first, std::placeholders::_1)
, std::bind(&t_equal_range::second, std::placeholders::_1)
, std::back_inserter(destination_container)
, predicate));
稍后,代码将执行以下操作:
do_copy_from(return_me_an_equal_range_of_My_Type_ptr());
do_copy_from(get_me_another_equal_range());
do_copy_from(and_so_on_dot_dot_dot());