• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1[/
2 / Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
3 /
4 / Distributed under the Boost Software License, Version 1.0. (See accompanying
5 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 /]
7
8[section:Service Service requirements]
9
10A class is a ['service] if it is publicly and unambiguously derived from
11`execution_context::service`, or if it is publicly and unambiguously derived
12from another service. For a service `S`, `S::key_type` shall be valid and
13denote a type (C++Std [temp.deduct]), `is_base_of_v<typename S::key_type, S>`
14shall be `true`, and `S` shall satisfy the `Destructible` requirements (C++Std
15[destructible]).
16
17The first parameter of all service constructors shall be an lvalue reference to
18`execution_context`. This parameter denotes the `execution_context` object that
19represents a set of services, of which the service object will be a member.
20[inline_note These constructors may be called by the `make_service` function.]
21
22A service shall provide an explicit constructor with a single parameter of
23lvalue reference to `execution_context`. [inline_note This constructor may be
24called by the `use_service` function.]
25
26  class my_service : public execution_context::service
27  {
28  public:
29    typedef my_service key_type;
30    explicit my_service(execution_context& ctx);
31    my_service(execution_context& ctx, int some_value);
32  private:
33    virtual void shutdown() noexcept override;
34    ...
35  };
36
37A service's `shutdown` member function shall destroy all copies of user-defined
38function objects that are held by the service.
39
40[endsect]
41