相关特征和关联因素
异步代理具有一些相关的特性(Associated Characteristics),用于指定当异步操作作为该代理的一部分时应该如何表现,例如:
分配器(Allocator),它决定代理的异步操作如何获取内存资源。
取消槽(Cancellation slot),它决定代理的异步操作如何支持取消操作。
执行器(Executor),它决定代理的完成处理程序如何排队并运行。
当异步操作在异步代理中运行时,其实现可能会查询这些相关特征,并使用它们来满足它们所代表的要求或偏好。异步操作通过将关联特性(Associator Trait)应用到完成处理程序来执行这些查询。 每个特征都有一个相应的关联特性。
关联特性可以为具体的完成处理程序类型专门化,以:
接受异步操作提供的默认特性,并按原样返回该默认特性
返回特性的无关实现,或
适配所提供的默认值,以引入完成处理程序所需的额外行为。
关联因素(Associator)的规范
假设有一个名(关联特性的名称分别为关联分配器(associated_allocator)、关联执行器(associated_executor)和关联取消槽(associated_cancellation_slot))为 associated_R 的关联特性,其具有以下内容:
一个类型为
S的源值s,在这种情况下是完成处理程序及其类型;一组类型要求(或概念Concept)
R,定义了相关特征的语法和语义要求;一个类型为
C的候选值c,符合类型要求R,代表由异步操作提供的默认特性实现。
异步操作使用关联特性来计算:
类型
associated_R<S, C>::type,以及值
associated_R<S, C>::get(s, c),
这些满足 R 中定义的要求。为了方便起见,这些内容也可以通过类型别名 associated_R_t<S, C> 和自由函数(Free Function) get_associated_R(s, c) 访问。
该特性的主要模板被指定为:
如果
S::R_type是格式正确(Well-Formed)的,则定义嵌套类型别名type为S::R_type,并定义一个静态成员函数get,返回s.get_R();否则,如果
associator<associated_R, S, C>::type是格式正确的并表示一种类型,则从associator<associated_R, S, C>继承;否则,定义嵌套类型别名
type为C,并定义一个静态成员函数get,返回c。
Last updated