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)) {
あとさっさとテンプレートを身に付けないと破滅する。