Avatar
struct Foo<B: Base> : Decodable { let obj: B public func encode(to encoder: Encoder) throws { B.encode(obj)(encoder) } public init(from decoder: Decoder) throws { self.obj = B(from: Decoder) } } これなら、宣言の外の情報は破棄されますが、Bはopenにできそう。