
I have my graph working with BFS, and a BFSvisitor. But, I don't want the BFSvisitor to be in the header file. Since, it is, I have to declare properties I want to use in the visitor, but then I have to pass them in in the constructor for the class that contains the graph and the visitor structure ... Here is my visitor (in .hpp): /* ... other code */ /*! Structure for creating BFSvisitor * * The property maps are being assigned in the constructor for the * Ann object - I don't know how inneficient of a method that is. * i.e. if I should be using references. */ struct propagate_node : public boost::base_visitor<propagate_node> { // getting the dynamically created VoltageMap boost::property_map<Digraph, vertex_voltage_t>::type voltmap; boost::property_map<Digraph, vertex_input_t>::type inputmap; boost::property_map<Digraph, vertex_output_t>::type outputmap; typedef boost::on_discover_vertex event_filter; /* * This is a functor For Breadth First Visit. */ template <class Vertex, class Digraph> void operator()(Vertex v, Digraph& G) { boost::graph_traits<Digraph>::out_edge_iterator ed; // getting the dynamically created VoltageMap && InputMap double volt = boost::get(voltmap, v); bool in = boost::get(inputmap, v); bool out = boost::get(outputmap, v); // mapping sigmoid (don't apply sigmoid to input/output layers) if (in == false && out == false) { // justify this sigmoid ??? volt = 1/(1+pow(MYEXP,-volt)); boost::put(voltmap, v, volt); } if (v != *vertices(G).first) { for ( ed = boost::out_edges(v, G).first; ed != boost::out_edges(v, G).second; ed++) { boost::put( voltmap, target(*ed, G), get(voltmap,target(*ed,G))+get(boost::edge_weight,G,*ed)* volt); } } } } prop; /* ... other code */ So in the c'tor I have to do (in .cpp): /* ... in initializer list */ VoltageMap(get(vertex_voltage_t(), net)), InputMap(get(vertex_input_t(), net)), OutputMap(get(vertex_output_t(), net)), /* ... other code */ prop.voltmap = VoltageMap; prop.inputmap = InputMap; prop.outputmap = OutputMap; to pass my properties from the graph to the visitor ... there has to be a better way to do this. How can I put the visitor definition into the .cpp, and only declare it in the .hpp?