bind/mem_fn.hpp
Go to the documentation of this file.
1 #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED
2 #define BOOST_BIND_MEM_FN_HPP_INCLUDED
3 
4 // MS compatible compilers support #pragma once
5 
6 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
7 # pragma once
8 #endif
9 
10 //
11 // mem_fn.hpp - a generalization of std::mem_fun[_ref]
12 //
13 // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
14 // Copyright (c) 2001 David Abrahams
15 // Copyright (c) 2003-2005 Peter Dimov
16 //
17 // Distributed under the Boost Software License, Version 1.0. (See
18 // accompanying file LICENSE_1_0.txt or copy at
19 // http://www.boost.org/LICENSE_1_0.txt)
20 //
21 // See http://www.boost.org/libs/bind/mem_fn.html for documentation.
22 //
23 
24 #include <boost/config.hpp>
25 #include <boost/get_pointer.hpp>
27 
28 namespace boost
29 {
30 
31 #if defined(BOOST_NO_VOID_RETURNS)
32 
33 #define BOOST_MEM_FN_CLASS_F , class F
34 #define BOOST_MEM_FN_TYPEDEF(X)
35 
36 namespace _mfi // mem_fun_impl
37 {
38 
39 template<class V> struct mf
40 {
41 
42 #define BOOST_MEM_FN_RETURN return
43 
44 #define BOOST_MEM_FN_NAME(X) inner_##X
45 #define BOOST_MEM_FN_CC
46 
48 
49 #undef BOOST_MEM_FN_CC
50 #undef BOOST_MEM_FN_NAME
51 
52 #ifdef BOOST_MEM_FN_ENABLE_CDECL
53 
54 #define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
55 #define BOOST_MEM_FN_CC __cdecl
56 
58 
59 #undef BOOST_MEM_FN_CC
60 #undef BOOST_MEM_FN_NAME
61 
62 #endif
63 
64 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
65 
66 #define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
67 #define BOOST_MEM_FN_CC __stdcall
68 
70 
71 #undef BOOST_MEM_FN_CC
72 #undef BOOST_MEM_FN_NAME
73 
74 #endif
75 
76 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
77 
78 #define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
79 #define BOOST_MEM_FN_CC __fastcall
80 
82 
83 #undef BOOST_MEM_FN_CC
84 #undef BOOST_MEM_FN_NAME
85 
86 #endif
87 
88 #undef BOOST_MEM_FN_RETURN
89 
90 }; // struct mf<V>
91 
92 template<> struct mf<void>
93 {
94 
95 #define BOOST_MEM_FN_RETURN
96 
97 #define BOOST_MEM_FN_NAME(X) inner_##X
98 #define BOOST_MEM_FN_CC
99 
101 
102 #undef BOOST_MEM_FN_CC
103 #undef BOOST_MEM_FN_NAME
104 
105 #ifdef BOOST_MEM_FN_ENABLE_CDECL
106 
107 #define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
108 #define BOOST_MEM_FN_CC __cdecl
109 
111 
112 #undef BOOST_MEM_FN_CC
113 #undef BOOST_MEM_FN_NAME
114 
115 #endif
116 
117 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
118 
119 #define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
120 #define BOOST_MEM_FN_CC __stdcall
121 
123 
124 #undef BOOST_MEM_FN_CC
125 #undef BOOST_MEM_FN_NAME
126 
127 #endif
128 
129 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
130 
131 #define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
132 #define BOOST_MEM_FN_CC __fastcall
133 
135 
136 #undef BOOST_MEM_FN_CC
137 #undef BOOST_MEM_FN_NAME
138 
139 #endif
140 
141 #undef BOOST_MEM_FN_RETURN
142 
143 }; // struct mf<void>
144 
145 #undef BOOST_MEM_FN_CLASS_F
146 #undef BOOST_MEM_FN_TYPEDEF_F
147 
148 #define BOOST_MEM_FN_NAME(X) X
149 #define BOOST_MEM_FN_NAME2(X) inner_##X
150 #define BOOST_MEM_FN_CC
151 
152 #include <boost/bind/mem_fn_vw.hpp>
153 
154 #undef BOOST_MEM_FN_NAME
155 #undef BOOST_MEM_FN_NAME2
156 #undef BOOST_MEM_FN_CC
157 
158 #ifdef BOOST_MEM_FN_ENABLE_CDECL
159 
160 #define BOOST_MEM_FN_NAME(X) X##_cdecl
161 #define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl
162 #define BOOST_MEM_FN_CC __cdecl
163 
164 #include <boost/bind/mem_fn_vw.hpp>
165 
166 #undef BOOST_MEM_FN_NAME
167 #undef BOOST_MEM_FN_NAME2
168 #undef BOOST_MEM_FN_CC
169 
170 #endif
171 
172 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
173 
174 #define BOOST_MEM_FN_NAME(X) X##_stdcall
175 #define BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall
176 #define BOOST_MEM_FN_CC __stdcall
177 
178 #include <boost/bind/mem_fn_vw.hpp>
179 
180 #undef BOOST_MEM_FN_NAME
181 #undef BOOST_MEM_FN_NAME2
182 #undef BOOST_MEM_FN_CC
183 
184 #endif
185 
186 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
187 
188 #define BOOST_MEM_FN_NAME(X) X##_fastcall
189 #define BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall
190 #define BOOST_MEM_FN_CC __fastcall
191 
192 #include <boost/bind/mem_fn_vw.hpp>
193 
194 #undef BOOST_MEM_FN_NAME
195 #undef BOOST_MEM_FN_NAME2
196 #undef BOOST_MEM_FN_CC
197 
198 #endif
199 
200 } // namespace _mfi
201 
202 #else // #ifdef BOOST_NO_VOID_RETURNS
203 
204 #define BOOST_MEM_FN_CLASS_F
205 #define BOOST_MEM_FN_TYPEDEF(X) typedef X;
206 
207 namespace _mfi
208 {
209 
210 #define BOOST_MEM_FN_RETURN return
211 
212 #define BOOST_MEM_FN_NAME(X) X
213 #define BOOST_MEM_FN_CC
214 
216 
217 #undef BOOST_MEM_FN_CC
218 #undef BOOST_MEM_FN_NAME
219 
220 #ifdef BOOST_MEM_FN_ENABLE_CDECL
221 
222 #define BOOST_MEM_FN_NAME(X) X##_cdecl
223 #define BOOST_MEM_FN_CC __cdecl
224 
226 
227 #undef BOOST_MEM_FN_CC
228 #undef BOOST_MEM_FN_NAME
229 
230 #endif
231 
232 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
233 
234 #define BOOST_MEM_FN_NAME(X) X##_stdcall
235 #define BOOST_MEM_FN_CC __stdcall
236 
238 
239 #undef BOOST_MEM_FN_CC
240 #undef BOOST_MEM_FN_NAME
241 
242 #endif
243 
244 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
245 
246 #define BOOST_MEM_FN_NAME(X) X##_fastcall
247 #define BOOST_MEM_FN_CC __fastcall
248 
250 
251 #undef BOOST_MEM_FN_CC
252 #undef BOOST_MEM_FN_NAME
253 
254 #endif
255 
256 #undef BOOST_MEM_FN_RETURN
257 
258 } // namespace _mfi
259 
260 #undef BOOST_MEM_FN_CLASS_F
261 #undef BOOST_MEM_FN_TYPEDEF
262 
263 #endif // #ifdef BOOST_NO_VOID_RETURNS
264 
265 #define BOOST_MEM_FN_NAME(X) X
266 #define BOOST_MEM_FN_CC
267 
268 #include <boost/bind/mem_fn_cc.hpp>
269 
270 #undef BOOST_MEM_FN_NAME
271 #undef BOOST_MEM_FN_CC
272 
273 #ifdef BOOST_MEM_FN_ENABLE_CDECL
274 
275 #define BOOST_MEM_FN_NAME(X) X##_cdecl
276 #define BOOST_MEM_FN_CC __cdecl
277 
278 #include <boost/bind/mem_fn_cc.hpp>
279 
280 #undef BOOST_MEM_FN_NAME
281 #undef BOOST_MEM_FN_CC
282 
283 #endif
284 
285 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
286 
287 #define BOOST_MEM_FN_NAME(X) X##_stdcall
288 #define BOOST_MEM_FN_CC __stdcall
289 
290 #include <boost/bind/mem_fn_cc.hpp>
291 
292 #undef BOOST_MEM_FN_NAME
293 #undef BOOST_MEM_FN_CC
294 
295 #endif
296 
297 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
298 
299 #define BOOST_MEM_FN_NAME(X) X##_fastcall
300 #define BOOST_MEM_FN_CC __fastcall
301 
302 #include <boost/bind/mem_fn_cc.hpp>
303 
304 #undef BOOST_MEM_FN_NAME
305 #undef BOOST_MEM_FN_CC
306 
307 #endif
308 
309 // data member support
310 
311 namespace _mfi
312 {
313 
314 template<class R, class T> class dm
315 {
316 public:
317 
318  typedef R const & result_type;
319  typedef T const * argument_type;
320 
321 private:
322 
323  typedef R (T::*F);
324  F f_;
325 
326  template<class U> R const & call(U & u, T const *) const
327  {
328  return (u.*f_);
329  }
330 
331  template<class U> R const & call(U & u, void const *) const
332  {
333  return (get_pointer(u)->*f_);
334  }
335 
336 public:
337 
338  explicit dm(F f): f_(f) {}
339 
340  R & operator()(T * p) const
341  {
342  return (p->*f_);
343  }
344 
345  R const & operator()(T const * p) const
346  {
347  return (p->*f_);
348  }
349 
350  template<class U> R const & operator()(U const & u) const
351  {
352  return call(u, &u);
353  }
354 
355 #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200)
356 
357  R & operator()(T & t) const
358  {
359  return (t.*f_);
360  }
361 
362  R const & operator()(T const & t) const
363  {
364  return (t.*f_);
365  }
366 
367 #endif
368 
369  bool operator==(dm const & rhs) const
370  {
371  return f_ == rhs.f_;
372  }
373 
374  bool operator!=(dm const & rhs) const
375  {
376  return f_ != rhs.f_;
377  }
378 };
379 
380 } // namespace _mfi
381 
382 template<class R, class T> _mfi::dm<R, T> mem_fn(R T::*f)
383 {
384  return _mfi::dm<R, T>(f);
385 }
386 
387 } // namespace boost
388 
389 #endif // #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED
R
#define R(x, n)
Definition: SHA256.cpp:50
mem_fn_template.hpp
boost::_mfi::dm::F
RT::* F
Definition: bind/mem_fn.hpp:323
boost::_mfi::dm::operator!=
bool operator!=(dm const &rhs) const
Definition: bind/mem_fn.hpp:374
T
T
Definition: mem_fn_cc.hpp:25
config.hpp
boost::_mfi::dm::f_
F f_
Definition: bind/mem_fn.hpp:324
boost::_mfi::dm::operator()
const R & operator()(T const &t) const
Definition: bind/mem_fn.hpp:362
boost::_mfi::dm::argument_type
const T * argument_type
Definition: bind/mem_fn.hpp:319
boost::_mfi::dm::call
const R & call(U &u, void const *) const
Definition: bind/mem_fn.hpp:331
boost::_mfi::dm::dm
dm(F f)
Definition: bind/mem_fn.hpp:338
boost
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
f
f
boost::mem_fn
_mfi::dm< R, T > mem_fn(R T::*f)
Definition: bind/mem_fn.hpp:382
mem_fn_vw.hpp
boost::_mfi::dm::operator==
bool operator==(dm const &rhs) const
Definition: bind/mem_fn.hpp:369
boost::get_pointer
T * get_pointer(T *p)
Definition: get_pointer.hpp:20
boost::_mfi::dm::operator()
const R & operator()(U const &u) const
Definition: bind/mem_fn.hpp:350
boost::_mfi::dm::call
const R & call(U &u, T const *) const
Definition: bind/mem_fn.hpp:326
boost::_mfi::dm::result_type
const R & result_type
Definition: bind/mem_fn.hpp:318
mem_fn_cc.hpp
boost::_mfi::dm::operator()
const R & operator()(T const *p) const
Definition: bind/mem_fn.hpp:345
boost::_mfi::dm::operator()
R & operator()(T *p) const
Definition: bind/mem_fn.hpp:340
workaround.hpp
boost::_mfi::dm
Definition: bind/mem_fn.hpp:314
boost::_mfi::dm::operator()
R & operator()(T &t) const
Definition: bind/mem_fn.hpp:357
get_pointer.hpp


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:44:21