Opened 10 years ago
#7107 new Feature Requests
Support property bundles as default parameter in graph algorithms
| Reported by: | Owned by: | Jeremiah Willcock | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | graph |
| Version: | Boost 1.51.0 | Severity: | Optimization |
| Keywords: | property bundles | Cc: |
Description
Bundled properties don't support default parameters as internal properties do. Adding a possibility to tag members of a bundle would solve that issue.
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <string>
using namespace std;
using namespace boost;
struct City{};
struct Highway { double weight; };
typedef adjacency_list<
listS, vecS, bidirectionalS,
City, Highway>
Map;
typedef adjacency_list <
listS, vecS, directedS,
no_property, property < edge_weight_t, int > >
Map2;
int main()
{
Map m;
Map2 m2;
vector<double> distances(num_vertices(m2));
dijkstra_shortest_paths(
m2, *vertices(m2).first,
distance_map(make_iterator_property_map(distances.begin(),
get(vertex_index, m2))));
// does not work
// dijkstra_shortest_paths(
// m, *vertices(m).first,
// boost::distance_map(make_iterator_property_map(distances.begin(),
// get(vertex_index, m))));
return 0;
}
One solution could be to add an optional tags typedef that contains an mpl::map between member pointers and property enum types. Alternatively, a traits class could be specified to map to the right enum type. Maybe someone can also come up with a nice mechanism to transparently tag a member.
Note:
See TracTickets
for help on using tickets.
