用非原始数据类型的参数包装C ++函数

时间:2018-09-03 16:11:29

标签: c++ go cgo

到目前为止,已经多次讨论了

GoC++的互操作性(例如,here),并且通常已经证明可以包装C++函数C函数中,然后将C函数包装在CGO函数中。这是在C++应用程序中使用Go代码的方式。但是,大多数示例仅考虑具有原始数据类型参数(例如intchar *)的函数。

但是,如果C++函数希望传递std::vectorstd::set之类的STL容器怎么办? C中没有等效项,因此我不知道从CC++的传递方式。

static Status GetApproximateMemoryUsageByType(
      const std::vector<DB*>& dbs,
      const std::unordered_set<const Cache*> cache_set,
      std::map<MemoryUtil::UsageType, uint64_t>* usage_by_type);

UPD

仅供参考,以下是此问题如何solved的示例。这是RocksDB C++ API中的实函数。为了在Go中使用它,应该将其包装在以C++编写的函数(或多个函数)中,但看起来就像是用普通的C编写的一样。这些包装器将针对Go个二进制链接编译到库中。

0 个答案:

没有答案