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 + -
显示快捷键?