#include #include #include #include #include struct Node { Node() : conc_(0) {} double conc() const { return conc_; } void set_conc(double val) { conc_ = val; } private: double conc_; }; struct FEM { typedef std::vector::size_type size_type; FEM(std::vector const & nodes) : nodes_(nodes) {} size_type nnodes() const { return nodes_.size(); } Node & node(size_type i) { return nodes_[i]; } // Node const & node(size_type i) const { return nodes_[i]; } private: std::vector nodes_; }; int main() { std::vector nodes(10); FEM fem(nodes); size_t i = 5; double const val = 14; boost::function1 get_node = boost::bind(&FEM::node, boost::ref(fem), _1); boost::function1 set_value = boost::bind(&Node::set_conc, boost::ref(get_node(i)), _1); set_value(val); std::cout << get_node(i).conc() << std::endl; return 0; }