我想知道是否可以使用模板来做到这一点:
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)
但如果可能的话我想使用模板。
我正在尝试使用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成员一起使用?
和
但我无法弄清楚如何使它们在我的情况下工作.