Я пытаюсь использовать mupdf для создания программы (в Qt), которая позволит мне перечислить объекты документа в виде списка и позволит мне выбрать, какие объекты отображать/не отображать. Поскольку Qt — это С++, и мне с ним удобнее, я пытаюсь обернуть структуры, определенные в mupdf, в классы С++.
Прямо сейчас моя проблема заключается в следующем: одна из первых вещей, которые вы делаете в mupdf, это создаете глобальный контекст, который передается всем, включая функции, которые очищают и удаляют структуры.
Я знаком с созданием объекта с перегруженным operator()
, например:
struct ContextDeleter
{
inline void operator()(fz_context* ctx)
{
fz_drop_context(ctx);
}
};
который я затем могу передать unique_ptr
-
std::unique_ptr<fz_context, ContextDeleter> ctxPtr;
Чего я не могу понять, так это того, как сделать то же самое с такой функцией, как:
fz_drop_page(ctx, page);
ie:
struct PageDeleter
{
inline void operator()(fz_context* ctx, fz_page* pg)
{
fz_drop_page(ctx, pg);
}
}
Это, очевидно, неправильно, но это то, чего я пытаюсь достичь.
Как я могу создать средство удаления для unique_ptr
, которое включает 2 аргумента (в данном случае необходимый указатель контекста)? Есть ли способ сделать unique_ptr
осведомленным об указателе контекста для удаления страницы (в этом примере)? Или (у меня была одна мысль) мне нужно создать что-то, что обертывает unique_ptr
, чтобы я мог каким-то образом передать ему контекст для удаления позже (еще не полностью обдумал это).
Я видел примеры здесь:
Как использовать пользовательское средство удаления с член std::unique_ptr?
а также
Обертка C-кода с уникальным_ptr и пользовательским удаление
но я не могу понять, как заставить их работать в моем случае.