functionalのbindおよび関連機能のテスト

8722 ワード


注意:VS 2010 UPDATE 1でテストに合格
 1 /* functional bind */

 2 

 3 #include <iostream>

 4 #include <functional>

 5 

 6 using namespace std;

 7 using namespace std::placeholders;

 8 

 9 int TestAdd(int a, int b)

10 {

11     return a+b;

12 }

13 bool TestCompare(int a, int b)

14 {

15     return a<b;

16 }

17 class TestBindClass

18 {

19 public:

20     bool operator() (const int &a, const int &b) const

21     {

22         cout << a << "<" << b << " ? " << ( a<b ? "true" : "false" ) << endl;

23         return a<b;

24     }

25     typedef int first_argument_type;

26     typedef int second_argument_type;

27     typedef bool result_type;

28 };

29 template <class T> struct greater1 

30 {

31     bool operator() (const T& x, const T& y) const 

32     {

33         cout << x << ">" << y << " ? " << ( x>y ? "true" : "false" ) << endl;

34         return x>y;

35     }

36     //void operator() (const T& a, const T& b) const {cout << "a<b ? " << ( a<b ? "true" : "false" ) << endl;}

37     typedef T first_argument_type;

38     typedef T second_argument_type;

39     typedef bool result_type;

40 };

41 

42 void main()

43 {

44     //test bind function

45     auto fcn1 = bind(TestAdd, 5, 10);

46     cout << fcn1() << endl;

47 

48     //test bind function

49     auto fcn2 = bind(TestCompare, _1, 5);

50     cout << fcn2(4) << endl;

51 

52     //test binder1st function

53     binder1st<greater1<int>> fcn4(greater1<int>(), 6);

54     cout << fcn4(7) << endl;

55 

56     //test binder1st function

57     binder1st<TestBindClass> fcn3(TestBindClass(), 5);

58     cout << fcn3(3) << endl;

59 }