これは、範囲内の最後のアイテムを逆参照する正しい方法ですか?
std::string getName(Foos::const_iterator& begin, Foos::const_iterator& end)
{
return boost::apply_visitor(Detail::NameGetterForFoo(),*--end);
}
ベクトルには常に何かがあると仮定します。
コンテナに何かがあることが常に確実な場合は、最後に std::prev を使用してその前のイテレータを取得し、それをデクリメントします。コードブロックの書き方は次のとおりです。
std::string getName(Foos::const_iterator begin, Foos::const_iterator end)
{
// Assert: begin != end.
return boost::apply_visitor(Detail::NameGetterForFoo(),*std::prev(end));
}
編集:コンテナも .back() メンバー関数もサポートしています。イテレータ範囲の代わりにコンテナを渡す場合は、代わりにそれを使用できます。このコード ブロックでは、本当に必要なのはコンテナーの最後の要素だけであるように思われるため、これは役立つ場合があります。例えば
std::string getName(Foos const& foos)
{
// Assume Foos is a standard container with front() and back() and that
// it is non-empty.
return boost::apply_visitor(Detail::NameGetterForFoo(), foos.back());
}