相关特征和关联因素

异步代理具有一些相关的特性(Associated Characteristics),用于指定当异步操作作为该代理的一部分时应该如何表现,例如:

  • 分配器(Allocator),它决定代理的异步操作如何获取内存资源。

  • 取消槽(Cancellation slot),它决定代理的异步操作如何支持取消操作。

  • 执行器(Executor),它决定代理的完成处理程序如何排队并运行。

当异步操作在异步代理中运行时,其实现可能会查询这些相关特征,并使用它们来满足它们所代表的要求或偏好。异步操作通过将关联特性(Associator Trait)应用到完成处理程序来执行这些查询。 每个特征都有一个相应的关联特性。

关联特性可以为具体的完成处理程序类型专门化,以:

  1. 接受异步操作提供的默认特性,并按原样返回该默认特性

  2. 返回特性的无关实现,或

  3. 适配所提供的默认值,以引入完成处理程序所需的额外行为。

关联因素(Associator)的规范

假设有一个名(关联特性的名称分别为关联分配器(associated_allocator)、关联执行器(associated_executor)和关联取消槽(associated_cancellation_slot))为 associated_R 的关联特性,其具有以下内容:

  • 一个类型为 S的源值 s,在这种情况下是完成处理程序及其类型;

  • 一组类型要求(或概念ConceptR,定义了相关特征的语法和语义要求;

  • 一个类型为 C的候选值 c,符合类型要求 R,代表由异步操作提供的默认特性实现。

异步操作使用关联特性来计算:

  • 类型 associated_R<S, C>::type,以及

  • associated_R<S, C>::get(s, c)

这些满足 R 中定义的要求。为了方便起见,这些内容也可以通过类型别名 associated_R_t<S, C> 和自由函数(Free Functionget_associated_R(s, c) 访问。

该特性的主要模板被指定为:

  • 如果 S::R_type 是格式正确(Well-Formed)的,则定义嵌套类型别名 typeS::R_type,并定义一个静态成员函数 get,返回 s.get_R()

  • 否则,如果 associator<associated_R, S, C>::type 是格式正确的并表示一种类型,则从 associator<associated_R, S, C> 继承;

  • 否则,定义嵌套类型别名 typeC,并定义一个静态成员函数 get,返回 c

Last updated