函数指针类型 API
协议 1 中的自定义类型使用显式函数指针进行注册,而不是使用vsql::make_type<> 模板。函数签名与协议 3 的等效签名不同——它们接受原始指针和长度,而不是 Arg 和 Result 对象。
函数签名
注册
vsql::make_type<kMyTypeName>()(带有编译时字符串 NTTP)是首选形式。make_type(MYTYPE)(没有模板参数)是协议 1 形式——对它的支持将在 0.0.5 版本后移除。
原始 ABI 样式(函数)
协议 1 VDF 实现可以直接传递原始 C 结构体,而不是使用类型化包装器。这种样式将在 0.0.5 版本后移除——对于所有新代码,请使用 类型化参数/结果 API。结果常量
原始 ABI 通过在result->type 上设置的 vef_return_value_type_t 来传达结果状态:
在协议 3 中,
out.set()、out.set_null()、out.warning() 和 out.error() 会自动处理这一点。
协议 1 中的聚合注册
对于聚合,.clear<>() 和 .accumulate<>() 接受原始 ABI 函数指针签名。.prerun<>() 和 .postrun<>() 不接受——构建器需要类型化签名(void(PrerunArgs, PrerunResult) 和 void(PostrunArgs)),即使对于协议 1 扩展也是如此。对于所有新代码,请使用 类型化聚合方法。

