Hacer que los genéricos Swift jueguen con funciones sobrecargadas

Estoy tratando de construir un tipo genéricoMyStruct<T> que puede usar cualquieraFloat oDouble Para almacenamiento interno. En el inicializador, estoy pasando un argumento de tipo T (que pretendo serFloat oDouble) Ese inicializador llama a algunas funciones trigonométricas comosin() ycos(). Ambas funciones están sobrecargadas en las bibliotecas del sistema para proporcionarFloat yDouble versiones.

var f:Float=1.2
var d:Double=1.2

sin(f) //0.9320391
sin(d) //0.9320390859672263

El problema es que no puedo usarlos en mi estructura genérica. Un caso despojado se vería así:

struct MyStruct<T> {
    var v:T

    init(x:T){v=sin(x)}
}

Porque:

Error en la ejecución del área de juegos: Página sin título.xc página de juegos: 9: 17: error: no se puede invocar 'sin' con una lista de argumentos de tipo '(T)' init (x: T) {v = sin (x)}

Página sin título.xcplaygroundpage: 9: 17: nota: existen sobrecargas para 'sin' con estas listas de parámetros parcialmente coincidentes: (Float), (Double) init (x: T) {v = sin (x)}

Parece que debería haber una manera de hacer que esto funcione, pero se parece mucho aesta situación. Donde los comentarios sugieren que no hay forma de exigir la existencia de una función global.

Puedo forzar la situación usando una construcción como:

init(x:T){v=T(sin(Double(x)))}

y poniendo una restricción en T de que se puede construir a partir de unDouble, pero eso parece vencer el propósito de hacerFloat versión de la estructura, que consiste en reducir el esfuerzo de cálculo cuando se usa en un bucle crítico de código.

Parece que esto hubiera sido más fácil sisin() se había definido en la biblioteca como una función genérica en lugar de una función sobrecargada:

func sin<T:FloatingPointType> (x:T) -> T

Pero es lo que es.

¿Hay alguna manera de construir una biblioteca que sea independiente de Flotador / Doble en la parte superior de las bibliotecas estándar sin agregar mucha sobrecarga?

Respuestas a la pregunta(2)

Su respuesta a la pregunta