这是取消引用范围中最后一项的正确方法吗?
std::string getName(Foos::const_iterator& begin, Foos::const_iterator& end)
{
return boost::apply_visitor(Detail::NameGetterForFoo(),*--end);
}
假设我总是在向量中有一些东西。
如果您始终确定容器中有某些东西,请使用 std::prev on end 来获取它之前的迭代器,然后递减它。以下是我将如何编写您的代码块:
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());
}