是否可以为函数定义一个可选迭代器,该迭代器将根据函数的存在与否改变函数的行为?
举一个具体的例子,考虑定义
template<typename Graph,
typename random_access_iterator_distances,
typename random_access_iterator_predecessors,
typename back_insertor_iterator_frontier,
typename back_insertor_iterator_explored >
void dijkstra(const Graph &g,
const typename boost::graph_traits < Graph >::vertex_descriptor source,
random_access_iterator_distances distances,
random_access_iterator_predecessors predecessors,
const typename boost::graph_traits < Graph >::vertex_descriptor target = -1,
back_inserter_iterator_frontier frontier = null_iterator,
back_inserter_iterator_explored explored = null_iterator );
这null_iterator
将是一些表明用户不想要此输出的值。
通过定义两个单独的函数来解决这个问题,一个有边界并在定义中探索,另一个没有它,这不是一个好的选择,因为它需要重复代码(因为函数中的逻辑与是否frontier
存在explored
。)
是否有某种模式或替代方法null_iterator
可以使这种类型的代码在 C++ 中实现?