Ничего не понимаю, каким образом мне передать в конструктор QScopedPointer
функцию deleter
'a, как я это делал в std::unique_ptr
?
error: C2440: : невозможно преобразовать "initializer list" в "VlcInstancePtr"
struct VlcDeleter
{
static inline void InstanceCleanup(libvlc_instance_t *&pointer)
{
libvlc_release(pointer);
pointer = nullptr;
}
static inline void MediaPlayerCleanup(libvlc_media_player_t *&pointer)
{
libvlc_media_player_release(pointer);
pointer = nullptr;
}
static inline void MediaCleanup(libvlc_media_t *&pointer)
{
libvlc_media_release(pointer);
pointer = nullptr;
}
};
typedef QScopedPointer<libvlc_instance_t, void(*)(libvlc_instance_t*)> VlcInstancePtr;
typedef QScopedPointer<libvlc_media_player_t, void(*)(libvlc_media_player_t*)> VlcMediaPlayerPtr;
typedef QScopedPointer<libvlc_media_t, void(*)(libvlc_media_t*)> VlcMediaPtr;
При таком раскладе, не могу инициализировать QScopedPointer
таким образом:
vlcInstance_ = VlcInstancePtr(libvlc_new(0, 0), &VlcInstanceDeleter::cleanup);
vlcMediaPlayer_ = VlcMediaPlayerPtr(libvlc_media_player_new(vlcInstance_.data()), &VlcMediaPlayerDeleter::cleanup);
QString path = QString("path/to/");
vlcMedia_ = VlcMediaPtr(libvlc_media_new_path(vlcInstance_.data(), path.toUtf8().data()), &VlcMediaDeleter::cleanup);
QScopedPointer не умеет принимать deleter в качестве аргумента конструктора. Делетер передается в качестве 2-го параметра шаблона и не может быть переопределен в run-time. Сделайте так:
struct VlcDeleter
{
static void cleanup(libvlc_instance_t *&pointer)
{
libvlc_release(pointer);
pointer = nullptr;
}
static void cleanup(libvlc_media_player_t *&pointer)
{
libvlc_media_player_release(pointer);
pointer = nullptr;
}
static void cleanup(libvlc_media_t *&pointer)
{
/libvlc_media_release(pointer);
pointer = nullptr;
}
};
typedef QScopedPointer<libvlc_instance_t , VlcDeleter> VlcInstancePtr;
typedef QScopedPointer<libvlc_media_player_t, VlcDeleter> VlcMediaPlayerPtr;
typedef QScopedPointer<libvlc_media_t , VlcDeleter> VlcMediaPtr;
Инициализация переменной:
VlcInstancePtr vlcInstance_( libvlc_new(0, 0) );
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При создании любого проекта, консольного, классического, вылезает такая ошибка, может кто сталкивался с такой проблемой? C# работает прекрасно,...
Здравствуйте, как можно передать анонимную функцию из Delphi в C++? Delphi: