member_ptr.hpp

来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 738 行 · 第 1/2 页

HPP
738
字号
// Boost Lambda Library -- member_ptr.hpp ---------------------// Copyright (C) 1999, 2000 Jaakko J鋜vi (jaakko.jarvi@cs.utu.fi)// Copyright (C) 2000 Gary Powell (gary.powell@sierra.com)//// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//// For more information, see www.boost.org// --------------------------------------------------------------------------#if !defined(BOOST_LAMBDA_MEMBER_PTR_HPP)#define BOOST_LAMBDA_MEMBER_PTR_HPPnamespace boost { namespace lambda {class member_pointer_action {};namespace detail {// the boost type_traits member_pointer traits are not enough, // need to know more details.template<class T>struct member_pointer {  typedef typename boost::add_reference<T>::type type;  typedef detail::unspecified class_type;  typedef detail::unspecified qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = false);};template<class T, class U>struct member_pointer<T U::*> {  typedef typename boost::add_reference<T>::type type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = true);  BOOST_STATIC_CONSTANT(bool, is_function_member = false);};template<class T, class U>struct member_pointer<const T U::*> {  typedef typename boost::add_reference<const T>::type type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = true);  BOOST_STATIC_CONSTANT(bool, is_function_member = false);};template<class T, class U>struct member_pointer<volatile T U::*> {  typedef typename boost::add_reference<volatile T>::type type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = true);  BOOST_STATIC_CONSTANT(bool, is_function_member = false);};template<class T, class U>struct member_pointer<const volatile T U::*> {  typedef typename boost::add_reference<const volatile T>::type type;  typedef U class_type;  typedef const volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = true);  BOOST_STATIC_CONSTANT(bool, is_function_member = false);};// -- nonconst member functions --template<class T, class U>struct member_pointer<T (U::*)()> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1>struct member_pointer<T (U::*)(A1)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2>struct member_pointer<T (U::*)(A1, A2)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3>struct member_pointer<T (U::*)(A1, A2, A3)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4>struct member_pointer<T (U::*)(A1, A2, A3, A4)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7, class A8>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7, class A8, class A9>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {  typedef T type;  typedef U class_type;  typedef U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};// -- const member functions --template<class T, class U>struct member_pointer<T (U::*)() const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1>struct member_pointer<T (U::*)(A1) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2>struct member_pointer<T (U::*)(A1, A2) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3>struct member_pointer<T (U::*)(A1, A2, A3) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4>struct member_pointer<T (U::*)(A1, A2, A3, A4) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7, class A8>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7, class A8, class A9>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const> {  typedef T type;  typedef U class_type;  typedef const U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};  // -- volatile --template<class T, class U>struct member_pointer<T (U::*)() volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1>struct member_pointer<T (U::*)(A1) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2>struct member_pointer<T (U::*)(A1, A2) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3>struct member_pointer<T (U::*)(A1, A2, A3) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4>struct member_pointer<T (U::*)(A1, A2, A3, A4) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7, class A8>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4, class A5,         class A6, class A7, class A8, class A9>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) volatile> {  typedef T type;  typedef U class_type;  typedef volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};  // -- const volatiletemplate<class T, class U>struct member_pointer<T (U::*)() const volatile> {  typedef T type;  typedef U class_type;  typedef const volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1>struct member_pointer<T (U::*)(A1) const volatile> {  typedef T type;  typedef U class_type;  typedef const volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2>struct member_pointer<T (U::*)(A1, A2) const volatile> {  typedef T type;  typedef U class_type;  typedef const volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3>struct member_pointer<T (U::*)(A1, A2, A3) const volatile> {  typedef T type;  typedef U class_type;  typedef const volatile U qualified_class_type;  BOOST_STATIC_CONSTANT(bool, is_data_member = false);  BOOST_STATIC_CONSTANT(bool, is_function_member = true);};template<class T, class U, class A1, class A2, class A3, class A4>struct member_pointer<T (U::*)(A1, A2, A3, A4) const volatile> {  typedef T type;  typedef U class_type;  typedef const volatile U qualified_class_type;};template<class T, class U, class A1, class A2, class A3, class A4, class A5>struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) const volatile> {  typedef T type;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?