1 // Copyright (C) 2001-2003
2 // William E. Kempf
3 //
4 //  Distributed under the Boost Software License, Version 1.0. (See accompanying
5 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 
7 #include <boost/thread/thread.hpp>
8 #include <boost/ref.hpp>
9 #include <iostream>
10 
11 class factorial
12 {
13 public:
factorial(int x)14     factorial(int x) : x(x), res(0) { }
operator ()()15     void operator()() { res = calculate(x); }
result() const16     int result() const { return res; }
17 
18 private:
calculate(int x)19     int calculate(int x) { return x <= 1 ? 1 : x * calculate(x-1); }
20 
21 private:
22     int x;
23     int res;
24 };
25 
main()26 int main()
27 {
28     factorial f(10);
29     boost::thread thrd(boost::ref(f));
30     thrd.join();
31     std::cout << "10! = " << f.result() << std::endl;
32 }
33