小编 te*_*137的帖子

您可以指定类成员作为模板参数吗?

我想知道是否可以使用模板来做到这一点:

template <typename T, (something here)>
void DoSomething(T& class_object)
{
    std::cout << class_object.(something here) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

换句话说,您能否以某种方式传递您想要访问模板的成员对象?我似乎在任何地方都找不到任何例子。我知道你可以用宏来做到这一点:

#define DO_SOMETHING(T, member)
void DoSomething(T& class_object)
{
    std::cout << class_object.member << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但如果可能的话我想使用模板。

c++ templates

4
推荐指数
1
解决办法
98
查看次数

如何为包含需要2个参数的ac函数的unique_ptr类成员创建自定义删除器?

我正在尝试使用mupdf创建一个程序(在Qt中),这将允许我将文档的对象列为列表,并允许我选择要呈现/不呈现的对象.由于Qt是c ++,而且我对它更熟悉,我试图在m ++中用C++类包装结构.

现在我的问题是这个 - 你在mupdf中做的第一件事就是创建一个全局上下文,它传递给所有东西,包括清理和删除结构的函数.

我熟悉创建一个有重载的对象,operator()很像:

struct ContextDeleter
{
    inline void operator()(fz_context* ctx)
    {
        fz_drop_context(ctx);
    }
};
Run Code Online (Sandbox Code Playgroud)

然后我可以交给unique_ptr-

std::unique_ptr<fz_context, ContextDeleter> ctxPtr;
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是如何用以下函数做同样的事情:

fz_drop_page(ctx, page);
Run Code Online (Sandbox Code Playgroud)

即:

struct PageDeleter
{
     inline void operator()(fz_context* ctx, fz_page* pg)
     {
          fz_drop_page(ctx, pg);
     }
}
Run Code Online (Sandbox Code Playgroud)

这显然是不正确的,但我正在努力实现.

如何为unique_ptr包含2个参数(在这种情况下是必要的上下文指针)创建一个删除器?有没有办法让我unique_ptr知道删除页面的上下文指针(在本例中)?或者(我曾经想过)我需要创建一些包装的东西,unique_ptr所以我可以把它上传给上下文以便稍后删除(还没有完全考虑过).

我在这里看到了这些例子:

如何将自定义删除器与std :: unique_ptr成员一起使用?

使用unique_ptr和自定义删除器包装C代码

但我无法弄清楚如何使它们在我的情况下工作.

c++ qt unique-ptr c++11 mupdf

3
推荐指数
1
解决办法
1090
查看次数

标签 统计

c++ ×2

c++11 ×1

mupdf ×1

qt ×1

templates ×1

unique-ptr ×1