Ничего не понимаю, каким образом мне передать в конструктор 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) );
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При создании любого проекта, консольного, классического, вылезает такая ошибка, может кто сталкивался с такой проблемой? C# работает прекрасно,...
Здравствуйте, как можно передать анонимную функцию из Delphi в C++? Delphi: