Обтекание функции C ++ аргументами не примитивных типов данных - PullRequest
0 голосов
/ 03 сентября 2018

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 двоичными ссылками на.

...