...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
A class is a
service
if it is publicly and unambiguously
derived from
execution_context
::
service
,
or if it is publicly and unambiguously derived from another service. For
a service
S
,
S
::
key_type
shall be valid and denote a type (C++Std [temp.deduct]),
is_base_of_v
<
typename
S
::
key_type
,
S
>
shall be
true
, and
S
shall satisfy the
Destructible
requirements (C++Std [destructible]).
The first parameter of all service constructors shall be an lvalue reference
to
execution_context
. This
parameter denotes the
execution_context
object that represents a set of services, of which the service object will
be a member. [
Note:
These constructors may be called
by the
make_service
function.
—
end note
]
A service shall provide an explicit constructor with a single parameter of
lvalue reference to
execution_context
.
[
Note:
This constructor may be called by the
use_service
function. —
end note
]
class my_service : public execution_context::service { public: typedef my_service key_type; explicit my_service(execution_context& ctx); my_service(execution_context& ctx, int some_value); private: virtual void shutdown() noexcept override; ... };
A service's
shutdown
member
function shall destroy all copies of user-defined function objects that are
held by the service.