Но сначала вопрос не по теме (рефлексия), а ещё суровее - о создании 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++ коде по ней рефлективно пошариться. Узнать типы всех полей, увидеть вложенные структуры и т.п. Что-то им присвоить или куда-нибудь сериализовать существующую структуру. Это как-то делается?