gpt4 book ai didi

c++ - float 组转换

转载 作者:行者123 更新时间:2023-11-30 11:38:30 25 4
gpt4 key购买 nike

我有一个像这样的 vector :

vector<Vec3f> myCoolVector

其中充满了像 [1.0, 2.0, 3.1] 这样的数组和[4.2, 2.1, 7.7] , ... .

<小时/>

我想转换 myCoolVector返回2d-array of floats将其作为简单的多维 float 组发送回 Swift(如下所示: [[Float]] )。

But what I get returned (to Swift) is a variable with this crazy type:

Optional<UnsafeMutablePointer<Optional<UnsafeMutablePointer<Float>>>>

...instead of just this type: [[Float]].


请看一下我的代码:

(1) 代码 - C++:

+(float **)myCoolFunction {
vector<Vec3f> myCoolVector

// here fillMyCoolVector() fills the myCoolVector - NICE

float **floatArrayBackToSwift;
floatArrayBackToSwift = new float*[myCoolVector.size()];

for( size_t i = 0; i < myCoolVector.size(); i++ )
{
ary[i] = new float[3];
ary[i][0] = myCoolVector[i][0];
ary[i][1] = myCoolVector[i][1];
ary[i][2] = myCoolVector[i][2];
}
return floatArrayBackToSwift;
}

(2) 代码 - Swift:

let floatArray = MyBridge.myCoolFunction() // should be [[1.0, 2.0, 3.1], [4.2, 2.1, 7.7], ...]
print(floatArray)
<小时/>

我的问题:如何发送 myCoolVector作为一个简单的二维数组,如 [[Float]]回到 swift ?

任何帮助将不胜感激!

最佳答案

您的myCoolFunction返回float ** ,指向 float 的指针。并且C/C++中的任何指针类型都无法自动转换为Swift Array ,也不是 C/C++ 中的任何其他类型。

如果你真的想要 Array<Array<Float>> 中的结果(又名 [[Float]] ),您需要编写一些 Swift 代码来转换 Optional<UnsafeMutablePointer<Optional<UnsafeMutablePointer<Float>>>>Array<Array<Float>> .

类似这样的事情:

class MyWrappter {
static func myCoolFunction(count: Int) -> [[Float]] {
let ptrPtrFloat: UnsafeMutablePointer<UnsafeMutablePointer<Float>?>! = MyBridge.myCoolFunction()

let bpPtrFloat = UnsafeBufferPointer(start: ptrPtrFloat, count: count)
return bpPtrFloat.map {ptrFloat in
[ptrFloat![0], ptrFloat![1], ptrFloat![2]]
}
}
}

记住,你的myCoolFunction不返回有关 vector<Vec3f> 大小的任何信息,因此您可能需要使用其他方法将其传递到 Swift 端。

<小时/>

Swift 不擅长优化嵌套数组。最好考虑采用simd.float3或类似的东西。

关于c++ - float 组转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49471111/

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