template<typename Operation, typename Initiator>
struct ozo::base_async_operation< Operation, Initiator >
Base class for async operations.
Base class for async operation which provides facilities for initiator rebinding. Should be used by all the operations which support extentions like failover via initiator rebinding.
Example
Execute operation may look like this (simplified, for exposition only):
template <typename Initiator>
struct execute_op : base_async_operation <execute_op, Initiator> {
using base = typename execute_op::base;
using base::base;
template <typename P, typename Q, typename TimeConstraint, typename CompletionToken>
decltype(
auto) operator() (P&& provider, Q&& query, TimeConstraint t,
CompletionToken&& token)
const {
return async_initiate<CompletionToken, handler_signature<P>>(
}
};
constexpr execute_op<impl::initiate_async_execute>
execute;