함수의 존재 여부에 따라 함수의 동작을 변경하는 함수에 선택적 반복자를 정의 할 수 있습니까? 선택적 반복자를 함수에 전달
은 구체적인 예는null_iterator
이 출력을 원하지 않는 사용자를 나타내는 일부 값이 될 것입니다 정의
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);
을 고려해 줄 수 있습니다.
두 개의 분리 된 함수를 정의함으로써이 문제를 해결할 수 있습니다 (하나는 정의에서 탐색되고 다른 하나는 정의되지 않음). 코드의 중복이 필요하기 때문에 좋은 대안이 될 수 없습니다 (함수의 논리 frontier
또는 explored
이 있는지 여부와 밀접하게 관련되어 있습니다.
null_iterator
의 패턴 또는 대체품이있어 C++에서이 유형의 코드를 실현할 수 있습니까?
로 정의 된 경우 확인할 수 있습니다 :: 선택 '? –
@KerrekSB : 좀 더 자세히 설명해 주시겠습니까? 유망한 솔루션처럼 보입니까? – ldog
글쎄,'boost :: optional'함수 인수를 만든 다음이 함수는 반복자가 전달되었는지 여부를 확인할 수 있습니다. –