我正在试图找出Swift仿制药的工作原理。具体来说,我没有找到关于编译模型的精确陈述。在C ++中,泛型(模板)不是单独编译的,因为它们为每个调用站点实例化(至少在原理上)。相反,Java泛型是单独编译的。 Swift的情况是什么,涉及单独编写泛型?
答案 0 :(得分:4)
这是两者的组合,取决于优化器决定将获得更好的性能。他们在WWDC Session 404: Advanced Swift结束时谈论它。幻灯片说:
Swift可以直接运行通用代码
优化程序可以随意生成通用代码的专用版本
- 单独编写泛型
- 编译速度更快
- 灵活地交换代码大小以提高速度
答案 1 :(得分:1)
从语义上讲,它与C ++方式类似。在使用T
参数化的Swift泛型函数中,您可以在运行时直接访问T
之类的T.self
。您也可以在C ++中执行此操作,但不能在Java中执行此操作,其中泛型只是编译时和之后的类型擦除。