Ich verstehe nicht, warum dies nicht möglich ist:entspricht nicht Fehler zu Protokoll, wenn sie versuchen Erweiterung anwenden mit PAT
import Foundation
import simd
protocol TestProtocol {
associatedtype ElementType
func reduce_add(x:Self) -> ElementType
}
extension float2 : TestProtocol {
typealias ElementType=Float
}
Ich erhalte einen „Typ‚float2‘entspricht nicht Protokoll‚Testprotokoll‘ "Fehler auf dem Spielplatz. Insbesondere es sagt mir:
Playground execution failed: Untitled Page.xcplaygroundpage:3:1: error: type 'float2' does not conform to protocol 'TestProtocol' extension float2 : TestProtocol {^Untitled
Page.xcplaygroundpage:6:10: note: protocol requires function 'reduce_add' with type 'float2 -> ElementType' func reduce_add(x:Self) -> ElementType
Als ich an der simd
Schnittstelle aussehen, aber ich sehe:
/// Sum of the elements of the vector.
@warn_unused_result
public func reduce_add(x: float2) -> Float
und wenn ich reduce_add(float2(2.4,3.1))
anrufe, bekomme ich das richtige Ergebnis. ElementType ist typealias
ed zu Float
.
Wohin gehe ich hier falsch?
Ah. Ich glaube, ich war verwirrt, dass man Operatoren verlangen kann, die global sind, aber anscheinend ein Sonderfall. Wenn mein Ziel also ist, über verschiedene Vektortypen zu verallgemeinern, muss ich die gesamte simd-Bibliothek als Instanzfunktionen spiegeln. – Omegaman
@ Omegaman: Ja. (Zumindest kommt mir derzeit keine Alternative in den Sinn.) –