항목을 추가하는 함수를 작성하고 싶습니다. addItem 및 addItems에 각각 move variant가 있습니다. 후자는 2 개의 입력 반복자를 허용합니다. 단일 항목을 추가하려면 rvalue 참조로 서명을 오버로드 할 수 있습니다. 하지만 move semantics와 함께 작동하도록 템플릿 함수를 오버로드하려면 어떻게해야합니까?이동 의미론 반복자 및 템플릿 사용 방법
void addItem(const shared_ptr<Item>& item, uint score) {
// code that copies the shared_ptr…
}
void addItem(shared_ptr<Item>&& item, uint score) {
// code that moves the shared_ptr…
}
template<typename Iterator>
void addItems(Iterator begin, Iterator end) {
/*
* What to do here to take both move and normal iterators?
* Since I cannot overload by signature I dont know how to
* differentiate between move and non move iterators
*/
}
함수에 대해 단일 이름을 사용할 수 있으며 입력 반복기를 구별 할 수 있습니까?
당신이로 봤어 ['표준 : make_move_iterator'] (http://en.cppreference.com/w/cpp/iterator/make_move_iterator)? – CoryKramer
나는 가지고 있지만, 움직이는 것과 움직이지 않는 반복자를 모두 받아들이는 함수를 오버로드하는 법을 이해하지 못한다. – ManuelSchneid3r
@ ManuelSchneid3r : 현재 서명이 _all_ 반복자를 허용합니다. –