来自C++,我正在尝试在Swift中进行一些元编程。例如,我想实现一个将两个数字相加的元函数。我已经尝试过这样的事情:
protocol IntWrapper {
class var value: Int { get }
}
struct A: IntWrapper {
static let value = 5
}
struct B: IntWrapper {
static let value = 7
}
struct Sum<T: IntWrapper, U: IntWrapper>: IntWrapper {
static let value = T.value + U.value
}
但是,这是行不通的:Xcode提示
T.Type
没有成员value
(或者有时会崩溃)。如何实现这种功能?
最佳答案
通用对象当前不支持static
存储的属性。当我将您的代码放在操场上时,我实际上收到了此错误:
Playground execution failed: <EXPR>:23:5: error: static variables not yet supported in generic types
static let value = T.value + U.value
^~~~~~
您可以改为使用计算属性来解决该问题(无论如何,这可能一直是您想要的):
struct Sum<T: IntWrapper, U: IntWrapper>: IntWrapper {
static var value: Int {
return T.value + U.value
}
}
注意:由于它是计算属性,因此您需要使用
value
而不是var
声明let
。进行这些更改后,
println(Sum<A, B>.value)
会按您期望的那样打印12
。关于swift - Swift中的元编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26939354/