named_creation_functor.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 69 行
HPP
69 行
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2007-2008. 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)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#ifndef BOOST_INTERPROCESS_SYNC_NAMED_CREATION_FUNCTOR_HPP#define BOOST_INTERPROCESS_SYNC_NAMED_CREATION_FUNCTOR_HPP#include <boost/interprocess/creation_tags.hpp>#include <boost/interprocess/detail/type_traits.hpp>#include <boost/interprocess/detail/mpl.hpp>namespace boost {namespace interprocess {namespace detail {struct named_creation_functor_no_arg{};template <class T, class Arg = named_creation_functor_no_arg>class named_creation_functor{ typedef named_creation_functor_no_arg no_arg_t; public: named_creation_functor(detail::create_enum_t type, Arg arg = Arg()) : m_creation_type(type), m_arg(arg){} template<class ArgType> void construct(void *address, typename enable_if_c<is_same<ArgType, no_arg_t>::value>::type * = 0) const { new(address)T; } template<class ArgType> void construct(void *address, typename enable_if_c<!is_same<ArgType, no_arg_t>::value>::type * = 0) const { new(address)T(m_arg); } bool operator()(void *address, std::size_t, bool created) const { switch(m_creation_type){ case detail::DoOpen: return true; break; case detail::DoCreate: case detail::DoOpenOrCreate: if(created){ construct<Arg>(address); } return true; break; default: return false; break; } } private: detail::create_enum_t m_creation_type; Arg m_arg;};} //namespace detail {} //namespace interprocess {} //namespace boost {#endif //BOOST_INTERPROCESS_SYNC_NAMED_CREATION_FUNCTOR_HPP
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?