Go
против C++
возможность взаимодействия обсуждалась много раз (например, здесь ), и в целом было показано, что можно C++
функций обернуть в C
функции, а затем обернуть C
функции в CGO
функции. Это способ использования кода C++
в приложении Go
. Однако в большинстве примеров рассматриваются только функции с параметрами примитивных типов данных (например, int
или char *
).
Но что, если функция C++
ожидает, что контейнеры STL, такие как std::vector
или std::set
, будут переданы? Для них нет эквивалентов в C
, поэтому я понятия не имею, что перейти с C
на C++
.
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
Просто для справки, вот пример того, как эта проблема была решена . Это реальная функция от RocksDB C++ API
. Чтобы использовать его в Go
, он должен быть заключен в функцию (или несколько функций), которые написаны в C++
, но выглядят так, как будто они написаны простым C
. Эти обертки скомпилированы в библиотеку с Go
двоичными ссылками на.