Я пытаюсь вызвать функцию в библиотеке C++ с C-совместимым заголовком, который хочет, чтобы я прошел в матрице 4x4 для ее заполнения.CGO get a [] [] float32 from C ** float
My Go определение функции выглядит следующим образом:
func GetMatrix(matrix [][]float32)
func GetMatrix(matrix []float32)
И заголовок с определяет это так:
void getMatrix(const float **matrix)
Я попытался с помощью C.GoBytes, чтобы получить массив байтов, но затем оттуда я немного потерянный, поскольку я должен перейти от байтового массива к массиву указателей, который затем снова преобразую в массив байтов и, в конечном счете, массив поплавков.
По крайней мере, я думаю, что это то, что мне нужно.
Я видел примеры кода, заменяющего базовый фрагмент Go на данные массива C, но я верю в эти случаи, Go GC их не собирает. В идеале матрица [] [] float32 будет вести себя как обычный фрагмент Go.
Редактировать: документации были неправильными, и лежащие в основе типа С на самом деле массив с плавающей точкой 16 элемента.
Таким образом, возникает вопрос, могу ли я использовать C.GoBytes с указателем, указателю на массив, и если да, то как мне получить [] float32 из [] байта?
Вот что я думал, но все ссылки на этот апи вызов относятся к матрице, построенной с массивом 4x4 массивов. – Gaidin
Зависит от конкретного заявления C (к сожалению, не указано в вопросе). Ответ Atom, вероятно, правильный, я дам ему попробовать ;-) – zzzz
Может быть, не в тему, но какой смысл иметь указатель на указатель на матрицу? – Gaidin