gpt4 book ai didi

go - 使用以 C 类型作为参数的导出函数类型时出现问题

转载 作者:IT王子 更新时间:2023-10-29 01:15:39 26 4
gpt4 key购买 nike

编辑:感谢@Not_a_Golfer 更改了标题以更好地反射(reflect)问题

我一直在试验 Go,但无法弄清楚这个问题。

以下内容包含在主包中时工作正常:

// Define a callback-function type, and define an invoker for it
type Callback func(i C.int, d C.double)
func Invoke(cb Callback, i C.int, d C.double) {
cb(i, d)
}
//... then define my callback and pass it into the invoker
func foo(i C.int, d C.double) {
fmt.Printf("i %d d %f\n", i, d)
}
func main() {
Invoke(foo, 2, 2.2)
}

但是当我在包中定义 type CallbackInvoke 时,将包导入 main 并调用 mypkg.Invoker(foo, 2, 2.2) 我收到以下构建错误:

src/hello/hello.go:9: cannot convert foo (type func(C.int, C.double)) to type mypkg.Callback

编辑:这里是 hello 包的主要代码。我构建了所有内容,以便可以使用 go 命令进行构建/安装:

package main
import "C"
import "mypkg"
import "fmt"
func foo(i C.int, d C.double) {
fmt.Printf("i %d d %f\n", i, d)
}
func main() {
mypkg.Invoke( mypkg.Callback(foo), 2, 2.2 )
}

有人知道对于从包中导出的类型是否有什么特别的事情要做?我在参数中使用 C 类型,因为最终这将是 C 库的包装器,我只是想确保 C 类型不是将我的回调函数与回调类型匹配的问题的一部分。

这是包代码:

package mypkg
import "C"
import "fmt"
type Callback func(i C.int, d C.double)
func Invoke(cb Callback, i C.int, d C.double) {
fmt.Println("Calling cb\n")
cb( i, d )
}

最佳答案

它们实际上是不同的类型!

将您的代码更改为:

package main

import "C"
import "mypkg"

func main() {
a := 1

mypkg.Inc(C.int(a))
}

我的包:

package mypkg

import "C"

func Inc(a C.int) C.int {
return a + 1
}

编译第一个包会报错:./test.go:9: 不能在 mypkg.Inc 的参数中使用 C.int(a)(类型 C.int)作为类型 mypkg.C.int

关于go - 使用以 C 类型作为参数的导出函数类型时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com