C++ to Go 使用 SWIG : How to pass C++ pointers to Go?

标签 c++ arrays pointers go swig

<分区>

看下面的代码,我会解释

int* Camera::retrieveDataPointerPerBuffer() {
    int cameraData [10] = {1,2,3,4,5,6,7,8,9,10};
    int* pSrc = cameraData;
    return cameraData; 
} //camera.cpp

上面的代码有一个指向数组然后返回的int指针pSrc。这是C++中的一个函数。接下来,我使用 SWIG 从本质上包装这个 C++ 函数,以便我可以在 Go 中调用它。下面的代码演示了在 Go 中调用的函数。

func myCamera() {
    cam := camera.NewCamera()
    pSrc := cam.RetrieveDataPointerPerBuffer()

    for i := 0; i < 10; i++ {
        fmt.Println("%d", pSrc)
    }
} //main.go

注意:我知道我不能在 Go 中迭代指针。但是有什么办法吗?

输出:0

问题:如何通过从 C++ 到 Go 的指针访问数组元素? 附加信息:这是我正在处理的一个更大项目的简化版本。我必须返回这个指针,我不能返回一个 vector 。

如果您需要我为您澄清任何事情,请告诉我。

最佳答案

@JimB 感谢您提供的所有资源。我想通了,这似乎可以解决问题。

int* Camera::retrieveDataPointerPerBuffer() {
   int cameraData [10] = {1,2,3,4,5,6,7,8,9,10};
   int* pSrc = cameraData;
   return cameraData; 
} //camera.cpp

下面包含我所做的更改

func myCamera() { //For Goroutine
   cam := camera.NewCamera()
   pSrc := cam.RetrieveDataPointerPerBuffer()

   arraySize := 10
   slice := (*[1 << 30]C.int)(unsafe.Pointer(pSrc))[:arraySize:arraySize]

   fmt.Println(slice)
}

输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

跟进问题:有人介意解释一下这行代码吗?

slice := (*[1 << 30]C.int)(unsafe.Pointer(pSrc))[:arraySize:arraySize]

关于C++ to Go 使用 SWIG : How to pass C++ pointers to Go?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54793264/

相关文章:

java - 在 libGdx 中用随机 vector 2填充数组

pointers - 我们应该在 "fundamentals of programming"类(class)中教授指针吗?

python - 创建一个python列表,一个指针指向两个地方

c++ - 如何将 Switch Qml 添加到 qt widgets?

c++ - 如何递归调用以结构数组为参数的函数

javascript - 读取从 PHP-JS 返回数组的计算值

arrays - 如何将函数的所有结果存储到 Lua 中的单个变量中?

C - 指向字符串的指针数组

c++ - 需要元编程魔术来以无错误的方式定义位字段的母矿脉

c++ - Boost 图形库 - 未找到 adjacent_vertices 函数