| [/ |
| / Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
| / |
| / Distributed under the Boost Software License, Version 1.0. (See accompanying |
| / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| /] |
| |
| [section:Service Service requirements] |
| |
| 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. |
| [inline_note These constructors may be called by the `make_service` function.] |
| |
| A service shall provide an explicit constructor with a single parameter of |
| lvalue reference to `execution_context`. [inline_note This constructor may be |
| called by the `use_service` function.] |
| |
| 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. |
| |
| [endsect] |