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