Использование unique_ptr и специального средства удаления с библиотекой fftw3.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Использование unique_ptr и специального средства удаления с библиотекой fftw3.

Сообщение Anonymous »

При использовании библиотеки быстрого преобразования Фурье (FFT) fftw3 переменная плана объявляется и инициализируется, затем она используется для выполнения некоторых БПФ и впоследствии уничтожается, когда память должна быть освобождена:

Код: Выделить всё

#include 

// Declare plan
fftw_plan myPlan;

// Initialise plan
myPlan = fftw_plan_dft_r2c(3, m, f, reinterpret_cast(fk.get()), FFTW_PATIENT);

// Perform an FFT
fftw_execute(myPlan);

// Free the memory associated with the plan
fftw_destroy_plan(myPlan);
Выше: m, f и fk.get() — это необработанные указатели на массивы, и код работает отлично.
Однако я Я пытался настроить этот процесс с помощью интеллектуального указателя, который автоматически освобождает память, когда план выходит за рамки. Вот что у меня получилось:

Код: Выделить всё

std::unique_ptr myPlan(
fftw_plan_dft_r2c(3, m, f, reinterpret_cast(fk.get()), FFTW_PATIENT),
fftw_destroy_plan
);
К сожалению, я получаю следующую ошибку компилятора:

Код: Выделить всё

no instance of constructor "std::unique_ptr::unique_ptr [with _Tp=fftw_plan, _Dp=void (*)(fftw_plan p)]" matches the argument listC/C++(289)
strFunc.cc(26, 9): argument types are: (fftw_plan, void (fftw_plan p))
Я вижу, что типы вторых аргументов не совпадают, но разыменование, похоже, не решает проблему (и я не понимаю, почему это могло бы произойти).
p>
Если у кого-то есть идеи относительно того, как прогрессировать, я буду очень признателен!
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... w3-library
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»