アイテムを追加する関数を記述したいと思います。 addItemとaddItemsのそれぞれに移動バリアントがあります。後者は2つの入力イテレータを受け入れます。 1つのアイテムを追加するには、rvalue参照で署名をオーバーロードすることができます。しかし、私はどのように移動セマンティクスで動作するようにテンプレート関数をオーバーロードするのですか?移動セマンティクスイテレータとテンプレートの使用方法
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
*/
}
関数には1つの名前を付けることができますが、入力イテレータを区別することはできますか?
あなたは[ 'のstd :: make_move_iterator'](http://en.cppreference.com/w/cpp/iterator/make_move_iterator)に見たことがありますか? – CoryKramer
私は持っていますが、移動と非移動のイテレータの両方を受け入れる関数をオーバーロードする方法を理解していません。 – ManuelSchneid3r
@ ManuelSchneid3r:あなたの現在の署名は_all_イテレータを受け入れます –