mirror of
https://github.com/boostorg/asio.git
synced 2026-01-29 07:02:09 +00:00
The associator trait is used to generically forward associators, such as
associated_executor<> and associated_allocator<>, through intermediate
completion handlers. For example:
template <typename Handler>
struct intermediate_handler
{
Handler handler_;
template <typename... Args>
void operator()(Args&... args)
{
// ...
}
};
namespace boost {
namespace asio {
template <
template <typename, typename> class Associator,
typename Handler,
typename DefaultCandidate>
struct associator<
Associator,
intermediate_handler<Handler>,
DefaultCandidate>
{
using type =
typename Associator<Handler, DefaultCandidate>::type;
static type get(
const intermediate_handler<Handler>& h,
const DefaultCandidate& c = DefaultCandidate()) noexcept
{
return Associator<Handler, DefaultCandidate>::get(
h.handler_, c);
}
};
} // namespace asio
} // namespace boost