maybe.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 99 行
HPP
99 行
// Copyright Daniel Wallin 2006. Use, modification and distribution is// subject to 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)#ifndef BOOST_PARAMETER_MAYBE_060211_HPP# define BOOST_PARAMETER_MAYBE_060211_HPP# include <boost/mpl/if.hpp># include <boost/mpl/identity.hpp># include <boost/type_traits/is_reference.hpp># include <boost/type_traits/add_reference.hpp># include <boost/optional.hpp># include <boost/python/detail/referent_storage.hpp># include <boost/type_traits/remove_cv.hpp># include <boost/type_traits/add_const.hpp>namespace boost { namespace parameter { namespace aux {struct maybe_base {};template <class T>struct maybe : maybe_base{ typedef typename add_reference<# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) T const# else typename add_const<T>::type# endif >::type reference; typedef typename remove_cv< BOOST_DEDUCED_TYPENAME remove_reference<reference>::type >::type non_cv_value; explicit maybe(T value) : value(value) , constructed(false) {} maybe() : constructed(false) {} ~maybe() { if (constructed) this->destroy(); } reference construct(reference value) const { return value; } template <class U> reference construct2(U const& value) const { new (m_storage.bytes) non_cv_value(value); constructed = true; return *(non_cv_value*)m_storage.bytes; } template <class U> reference construct(U const& value) const { return this->construct2(value); } void destroy() { ((non_cv_value*)m_storage.bytes)->~non_cv_value(); } typedef reference(maybe<T>::*safe_bool)() const; operator safe_bool() const { return value ? &maybe<T>::get : 0 ; } reference get() const { return value.get(); }private: boost::optional<T> value; mutable bool constructed; mutable typename boost::python::detail::referent_storage< reference >::type m_storage;};}}} // namespace boost::parameter::aux#endif // BOOST_PARAMETER_MAYBE_060211_HPP
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?