CGO, передать структуру из go в c ++ - PullRequest
2 голосов
/ 08 мая 2020

Я экспериментирую с cgo и хотел использовать c ++ с cgo. Я нашел этот пост об этом. Если у меня есть структура c ++ с именем Foo и структура go с именем Foo, я хочу передать go Foo в c ++. Я пробовал сделать это:

//bind.h

#ifdef __cplusplus
extern "C" {
#endif

  #include "structs.hpp"
  void bindCgo(Foo bar);

#ifdef __cplusplus
}
#endif

//structs.hpp

#ifndef STRUCTS_HPP_
#define STRUCTS_HPP_

typedef struct Foo {

  #ifdef __cplusplus
  std::string str;
  #endif

}
#endif
//bind.cc

#include "structs.hpp"
using namespace std;

void bindCgo(Foo bar) {
  cout << bar.str << endl; //this gives "sΘ\"
}

//main.go

import "unsafe"

// #cgo CFLAGS: -std=c99
// #include "bind.h"
import "C"

type Foo struct {
  str string
}

func main() {
  bar := Foo{""};

  C.bindCgo(((*C.Foo)(unsafe.Pointer(&bar))))
}

Теперь, когда я запускаю эту программу, она дает мне sΘ\. Это нормально и как я могу это исправить?

У меня также есть карты и векторы в моей структуре, поэтому использование char * не будет работать

...