« 自分に教わる | Main | 今日の日記 »

2007.10.30

C++でcallback

Higher-Order Perlにでてきたハノイの塔をC++で書いてみた。

#include <iostream>
#include <string>
#include <functional>
#include <boost/bind.hpp>
#include <boost/function.hpp>

using namespace boost;

class peg {
public:
  
explicit peg(const std::string& name) : name(name){  }
  
const std::string name;
};


void print_move(int disk, const peg& start, const peg& end);
void hanoi(int n, const peg& start, const peg& end, const peg& extra, function<void (intconst peg&, const peg&)> f);

int main(void)
{
  
//call back function
  function<void (intconst peg&, const peg&)> f;
  f = &print_move;

  hanoi(3, peg("A"), peg("C"), peg("B"), f);

  return 0;
}

void print_move(int disk, const peg& start, const peg& end){
  std::cout << 
"Move disk #" << disk << " from " << start.name << " to " << end.name << std::endl;
}

void hanoi(int n, const peg& start, const peg& end, const peg& extra, function<void (intconst peg&, const peg&)> f)
{
  
if(n==1) {
    f(n , start, end);
  } 
else {
    hanoi(n-1, start, extra, end, f);
    f(n, start, end);
    hanoi(n-1, extra, end, start, f);
  }
}

動かしてみる。

YUKI.N>./kati.pl
g++ -c -I/usr/include/boost-1_33_1 -g -W -Wall -ansi -pedantic hanoi.cpp
g++ -o hanoi hanoi.o -I/usr/include/boost-1_33_1 -g -W -Wall -ansi -pedantic
YUKI.N>./hanoi.exe
Move disk #1 from A to C
Move disk #2 from A to B
Move disk #1 from C to B
Move disk #3 from A to C
Move disk #1 from B to A
Move disk #2 from B to C
Move disk #1 from A to C


C++でcallbackは出来るようになった。

|

« 自分に教わる | Main | 今日の日記 »

Comments

10 for getting these free trials.

Posted by: free credit report experian | 2015.10.22 at 11:46 AM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/16922136

Listed below are links to weblogs that reference C++でcallback:

« 自分に教わる | Main | 今日の日記 »