1 2 #include <boost/parameter/name.hpp> 3 4 BOOST_PARAMETER_NAME(graph) 5 BOOST_PARAMETER_NAME(visitor) 6 BOOST_PARAMETER_NAME(root_vertex) 7 BOOST_PARAMETER_NAME(index_map) 8 BOOST_PARAMETER_NAME(in_out(color_map)) 9 10 namespace boost { 11 12 template <typename T = int> 13 struct dfs_visitor 14 { 15 }; 16 17 int vertex_index = 0; 18 } 19 20 #include <boost/parameter/preprocessor.hpp> 21 22 namespace graphs { 23 24 BOOST_PARAMETER_FUNCTION( 25 (void), // 1. parenthesized return type 26 depth_first_search, // 2. name of the function template 27 28 tag, // 3. namespace of tag types 29 30 (required (graph, *) ) // 4. one required parameter, and 31 32 (optional // four optional parameters, with defaults 33 (visitor, *, boost::dfs_visitor<>()) 34 (root_vertex, *, *vertices(graph).first) 35 (index_map, *, get(boost::vertex_index,graph)) 36 (in_out(color_map), *, 37 default_color_map(num_vertices(graph), index_map) 38 ) 39 ) 40 ) 41 { 42 // ... body of function goes here... 43 // use graph, visitor, index_map, and color_map 44 } 45 } 46