初めての関数ポインタ

Rubyで関数にblock投げて、とかができるからC++でもやってみたくなった。無名関数っぽくできないのは残念(いちいち名前付けるの面倒)だけど、boost使えばできるんかなー。

#include <string>
#include <set>
#include <vector>
#include <map>
#include <iostream>

using namespace std;

class Graph
{
public:
  Graph(){
  };
  virtual ~Graph(){
  };
  void addVertex(string v) {
	vertices.insert( v );
  }
  
  void setWeight(string u, string v, int weight) {
	addVertex(u);
	addVertex(v);
	weights[u][v] = weight;
  }

  void each_vertex(void (*func)(string v)) {
	for (set<string>::iterator it = vertices.begin(); it != vertices.end(); ++it) {
	  func((*it));
	}
  }

private:
  set<string> vertices;
  map<string, map<string, int> > weights;
};

void printVertices(string v) {
  cout << v << endl;
}

int main(int argc, char *argv[]) {
  Graph g;
  g.setWeight("0", "1", 1);
  g.each_vertex(printVertices);
  return 0;
}

この部分にちょっと感動した。

void each_vertex(void (*func)(string v)) {

あとさっさとテンプレートを身に付けないと破滅する。