Yes:
Tilde (” ~”) in kind restraints
In Go, common kinds can have restraints (this is why we exchanged wrapCType[CTYPE any, ...]
to wrapCType[CTYPE CNumber, ...]
) which are specified as user interfaces. When you compose something like:
kind Integer user interface int8
func include[T Integer]( a, b T) T {return a + b}
The Integer
restriction claims that the kind, T
, have to be an int
, int8
, and so on
Nonetheless, if you do this:
kind MyInt int.
var a MyInt = 1.
var b MyInt = 2.
c:= include( a, b).
It will not function because a
as well as b
are of kind MyInt
, not int
, which isn’t in the restriction checklist.
The tilde (“ ~
“) in a restriction like ~ int
indicates that the kind does not require to be int
specifically; it can be any kind of kind whose hidden kind is int
(such as MyInt
in my instance).
For some history …
The “C” plan you obtain when you compose import "C"
isn’t a “actual” plan like, as an example, the “fmt” plan is. It’s a “online” plan that informs the Go compiler to do expensive things to “convert” in between Go as well as C conventions (e.g. the compiler does something various when calling a Go feature vs. calling a C feature, and so on). I’m not extremely acquainted with cgo, so I had not been certain what sort of “magic” the compiler makes use of for the C.int
, C.char
, and so on kinds. Based upon that mistake message, it resembles C.char
obtains equated to an inner _ Ctype_char
kind which kind’s underlying kind is int8
(so it resembles someplace in Cgo it claims kind char = _ Ctype_char
as well as kind _ Ctype_char = int8
).
—
Anyhow, based upon this mistake:
underlying sort of _ Ctype_char is int8.
as well as the various other ones like, it resembles you do not require the CNumber
user interface as well as it truly all come down to GoNumber
, so you might simply state:
func wrapCType[CTYPE, GOTYPE GoNumber]( goValue * GOTYPE) (covered * CTYPE, finisher func()).
Now, however, I’m unsure what to recommend since I’m unsure if every one of the conversions in between every one of these kinds are permitted. Can you reveal an instance of exactly how you would certainly utilize this wrapCType
feature? Possibly I or another person will certainly have far better tips after seeing what you’re attempting to do.