【发布时间】:2018-04-22 08:43:51
【问题描述】:
我有一个通用的存储类:
class Storage<T> {
var storage: UnsafeMutablePointer<T>
var size: Int32
init(_ size: Int) {
self.size = Int32(size)
self.storage = UnsafeMutablePointer<T>.allocate(capacity: size)
}
}
我想对其进行扩展,使其能够具有不同的数学函数。例如,如果我想为Float 存储提供正弦函数:
import Accelerate
extension Storage where T == Float {
// In-place sine function.
func sin() {
vvsinf(storage, storage, &size)
}
}
或者在Double存储的情况下:
import Accelerate
extension Storage where T == Double {
// In-place sine function.
func sin() {
vvsin(storage, storage, &size)
}
}
这两种实现之间的唯一区别是使用的函数名称(vvsinf 和vvsin)。如果我们想通过添加更多这样的数学函数来扩展存储,我们将在两个地方为每个函数复制粘贴我们的代码。如果另外我们需要支持复制(而不是就地)数学运算,我们需要重复代码的位置数变为 4。
我的问题是:
在 Swift 中是否可以避免上述代码重复? 如果是 C,则可以使用宏轻松完成。
【问题讨论】:
-
我建议检查
Numeric协议。
标签: swift accelerate-framework