나는 한 쌍의 반복자를 받아들이는 함수 객체에 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());
구조 연산자() 함수를 사용하여 구조체를 사용하지 않으시겠습니까? –
제안 해 주셔서 감사합니다. 실용적이야. 이 문제를 해결하기 위해 할 수있는 일이 몇 가지 있지만, 나는 그들을 우아하다고 생각하지 않습니다. 궁극적으로, 나는 아마도 그러한 해결책을 사용하고 나의 삶과 함께 나아갈 것이다. 하지만이 문제는 내가 이해하기를 원했던 이해가 부족함을 보여 주므로 여기서 다시 돌아와이 질문을하지 않아도됩니다. –