Хотя это должно быть тривиальным вопросом, мне так и не удалось найти ответ. В C API существует множество функций, которые в качестве аргументов принимают указатели и указатели на указатели. Как использовать интеллектуальные указатели PROPERLY в качестве аргументов с API-интерфейсом C.Использование интеллектуальных указателей C++ 11 в качестве аргументов функции C
Вот пример, который я хотел бы преобразовать с помощью зЬй :: unique_ptr:
FMOD_SYSTEM* system = nullptr;
result = FMOD_System_Create(&system); // Create the main system object
FMOD_SOUND* musicStream;
result = FMOD_System_CreateSound(system,
musicStreamPath,
FMOD_CREATESTREAM,
nullptr,
&musicStream);
Ссылка: FMOD_System_Create FMOD_System_CreateSound
Я начинаю декларировании умные указатели как:
std::unique_ptr<FMOD_SYSTEM> system = nullptr;
std::unique_ptr<FMOD_SOUND> musicStream = nullptr;
Вот ошибки компилятора, если я использую .get():
не может преобразовать 'зЬй :: unique_ptr :: указатель {ака FMOD_SOUND *}' в 'FMOD_SOUND **' для аргумента '5' «FMOD_RESULT FMOD_System_CreateSound (FMOD_SYSTEM *, Const символ *, FMOD_MODE, FMOD_CREATESOUNDEXINFO *, FMOD_SOUND **) ' musicStream.get());
^
Используйте [ '.get()'] метод (http://en.cppreference.com/w/cpp/memory/unique_ptr/get), чтобы получить базовый указатель? – Cornstalks
Не работает только с .get(). Там, кажется, больше, но я пока не могу понять. – Zingam
Здесь есть реальный вопрос и ответ. Я работаю над этим. – Quuxplusone