1

这是取消引用范围中最后一项的正确方法吗?

std::string getName(Foos::const_iterator& begin, Foos::const_iterator& end)
{
    return boost::apply_visitor(Detail::NameGetterForFoo(),*--end);
}

假设我总是在向量中有一些东西。

4

1 回答 1

0

如果您始终确定容器中有某些东西,请使用 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());
}
于 2013-03-22T13:52:26.073 回答