00001 #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED
00002 #define BOOST_BIND_PROTECT_HPP_INCLUDED
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 namespace boost
00015 {
00016
00017 namespace _bi
00018 {
00019
00020 template<class F> class protected_bind_t
00021 {
00022 public:
00023
00024 typedef typename F::result_type result_type;
00025
00026 explicit protected_bind_t(F f): f_(f)
00027 {
00028 }
00029
00030 result_type operator()()
00031 {
00032 return f_();
00033 }
00034
00035 result_type operator()() const
00036 {
00037 return f_();
00038 }
00039
00040 template<class A1> result_type operator()(A1 & a1)
00041 {
00042 return f_(a1);
00043 }
00044
00045 template<class A1> result_type operator()(A1 & a1) const
00046 {
00047 return f_(a1);
00048 }
00049
00050 template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
00051 {
00052 return f_(a1, a2);
00053 }
00054
00055 template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
00056 {
00057 return f_(a1, a2);
00058 }
00059
00060 template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
00061 {
00062 return f_(a1, a2, a3);
00063 }
00064
00065 template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
00066 {
00067 return f_(a1, a2, a3);
00068 }
00069
00070 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
00071 {
00072 return f_(a1, a2, a3, a4);
00073 }
00074
00075 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
00076 {
00077 return f_(a1, a2, a3, a4);
00078 }
00079
00080 template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
00081 {
00082 return f_(a1, a2, a3, a4, a5);
00083 }
00084
00085 template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const
00086 {
00087 return f_(a1, a2, a3, a4, a5);
00088 }
00089
00090 template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)
00091 {
00092 return f_(a1, a2, a3, a4, a5, a6);
00093 }
00094
00095 template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const
00096 {
00097 return f_(a1, a2, a3, a4, a5, a6);
00098 }
00099
00100 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)
00101 {
00102 return f_(a1, a2, a3, a4, a5, a6, a7);
00103 }
00104
00105 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const
00106 {
00107 return f_(a1, a2, a3, a4, a5, a6, a7);
00108 }
00109
00110 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)
00111 {
00112 return f_(a1, a2, a3, a4, a5, a6, a7, a8);
00113 }
00114
00115 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const
00116 {
00117 return f_(a1, a2, a3, a4, a5, a6, a7, a8);
00118 }
00119
00120 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)
00121 {
00122 return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
00123 }
00124
00125 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
00126 {
00127 return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
00128 }
00129
00130 private:
00131
00132 F f_;
00133 };
00134
00135 }
00136
00137 template<class F> _bi::protected_bind_t<F> protect(F f)
00138 {
00139 return _bi::protected_bind_t<F>(f);
00140 }
00141
00142 }
00143
00144 #endif // #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED