Quantcast
Channel: Linux.org.ru: Форум (тех. форум)
Viewing all articles
Browse latest Browse all 74683

Как в C++, вызванном из Go, рефлексию по Go-структуре запилить?

$
0
0

Но сначала вопрос не по теме (рефлексия), а ещё суровее - о создании Go-типов из C++.

Есть некий C++ код, который пока не написан, вызываемый из Go. Ну например с помощью cgo https://golang.org/cmd/cgo/

Хочется в C++ сконструировать и вернуть в вызывающий Go-код сложную Go-структуру, типа произвольного (один из заранее известных) интерфейса, возвращающего другие интерфейсы. Некий бинарный JSON в виде вложенных интерфейсов.

var r := my_cpp_func()

// вот мы вызвали наш C++ код и нам вернулся интерфейс r.
// r может реализовывать один из заранее известных интерфейсов:
// MyArray, MyRectangle.
// C++ как-то должен про них знать и как-то говорить GC, что создал их.
// Далее мы выясняем, что это за интерфейс и дёргаем соответствующие методы.

if v, ok := r.(MyArray); ok {
    // --- ARRAY ---
    var size := v.size()
    ...
}

if v, ok := r.(MyRectangle); ok {
    // --- RECTANGLE ---
    var area := v.area();
    ...
}

Я так понимаю, хрен это получится сделать из-за уборщика мусора, который будет не в курсе, что мы там в C++ коде насоздавали. Да и вообще какой-то не трушный вей.

Ну ладно, хрен с ним.

Тогда вопрос по сабжу: передать в C++ некую go-структуру struct заранее неизвестного типа и в C++ коде по ней рефлективно пошариться. Узнать типы всех полей, увидеть вложенные структуры и т.п. Что-то им присвоить или куда-нибудь сериализовать существующую структуру. Это как-то делается?

 ,


Viewing all articles
Browse latest Browse all 74683

Latest Images

Trending Articles