Я экспериментирую с 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 * не будет работать