forked from boostorg/beast
Better handler_ptr (API Change):
fix #242 * Add public constructors * Add handler_ptr::empty() * Add handler_ptr::element_type * Remove make_handler_ptr free function * Compiler error if element_type is an array type * handler_ptr::get() returns nullptr if no object is owned
This commit is contained in:
@@ -45,9 +45,8 @@ public:
|
||||
template<class DeducedHandler, class... Args>
|
||||
read_some_op(DeducedHandler&& h,
|
||||
dynabuf_readstream& srs, Args&&... args)
|
||||
: d_(make_handler_ptr<data, Handler>(
|
||||
std::forward<DeducedHandler>(h), srs,
|
||||
std::forward<Args>(args)...))
|
||||
: d_(std::forward<DeducedHandler>(h),
|
||||
srs, std::forward<Args>(args)...)
|
||||
{
|
||||
(*this)(error_code{}, 0);
|
||||
}
|
||||
|
||||
@@ -39,15 +39,6 @@ P(DeducedHandler&& h, Args&&... args)
|
||||
}
|
||||
}
|
||||
|
||||
template<class T, class Handler>
|
||||
template<class DeducedHandler, class... Args>
|
||||
handler_ptr<T, Handler>::
|
||||
handler_ptr(int, DeducedHandler&& handler, Args&&... args)
|
||||
: p_(new P(std::forward<DeducedHandler>(handler),
|
||||
std::forward<Args>(args)...))
|
||||
{
|
||||
}
|
||||
|
||||
template<class T, class Handler>
|
||||
handler_ptr<T, Handler>::
|
||||
~handler_ptr()
|
||||
@@ -82,6 +73,27 @@ handler_ptr(handler_ptr const& other)
|
||||
++p_->n;
|
||||
}
|
||||
|
||||
template<class T, class Handler>
|
||||
template<class... Args>
|
||||
handler_ptr<T, Handler>::
|
||||
handler_ptr(Handler&& handler, Args&&... args)
|
||||
: p_(new P{std::move(handler),
|
||||
std::forward<Args>(args)...})
|
||||
{
|
||||
static_assert(! std::is_array<T>::value,
|
||||
"T must not be an array type");
|
||||
}
|
||||
|
||||
template<class T, class Handler>
|
||||
template<class... Args>
|
||||
handler_ptr<T, Handler>::
|
||||
handler_ptr(Handler const& handler, Args&&... args)
|
||||
: p_(new P{handler, std::forward<Args>(args)...})
|
||||
{
|
||||
static_assert(! std::is_array<T>::value,
|
||||
"T must not be an array type");
|
||||
}
|
||||
|
||||
template<class T, class Handler>
|
||||
auto
|
||||
handler_ptr<T, Handler>::
|
||||
@@ -112,27 +124,6 @@ invoke(Args&&... args)
|
||||
p_->handler(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template<
|
||||
class T, class CompletionHandler, class... Args>
|
||||
handler_ptr<T, CompletionHandler>
|
||||
make_handler_ptr(
|
||||
CompletionHandler&& handler, Args&&... args)
|
||||
{
|
||||
return handler_ptr<T, CompletionHandler>{0,
|
||||
std::move(handler),
|
||||
std::forward<Args>(args)...};
|
||||
}
|
||||
|
||||
template<
|
||||
class T, class CompletionHandler, class... Args>
|
||||
handler_ptr<T, CompletionHandler>
|
||||
make_handler_ptr(
|
||||
CompletionHandler const& handler, Args&&... args)
|
||||
{
|
||||
return handler_ptr<T, CompletionHandler>{0,
|
||||
handler, std::forward<Args>(args)...};
|
||||
}
|
||||
|
||||
} // beast
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user