如果一个类公开且明确地派生自 execution_context::service,或者公开且明确地派生自另一个服务,则该类是一个 服务。对于一个服务 S,S::key_type 必须是有效的,并且表示一个类型(C++Std [temp.deduct]),is_base_of_v<typename S::key_type, S> 必须为 true,并且 S 必须满足 Destructible 要求(C++Std [destructible])。
所有服务构造函数的第一个参数都必须是对 execution_context 的左值引用。此参数表示一个代表一组服务的 execution_context 对象,服务对象将成为该组的成员。[注意:这些构造函数可能由 make_service 函数调用。 —结束注意]
服务必须提供一个显式构造函数,该构造函数具有一个类型为 execution_context 的左值引用的单个参数。[注意:此构造函数可能由 use_service 函数调用。 —结束注意]
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; ... };
服务的 shutdown 成员函数必须销毁服务持有的所有用户定义函数对象的副本。