【发布时间】:2017-05-15 02:29:43
【问题描述】:
我希望我的 std::unique_ptr 调用 QObject::deleteLater 来破坏对象。
我不知道该怎么做。
我试过的都没有编译。
例如
std::unique_ptr<SomeQObject, decltype(&QObject::deleteLater)> var(
pointer, &QObject::deleteLater);
请帮忙...
补充 #1。
好的,我发现这行得通:
std::unique_ptr<QObject, decltype(std::mem_fun(&QObject::deleteLater))> var(
pointer,
std::mem_fun(&QObject::deleteLater));
而不是这个:
std::unique_ptr<QObject, decltype(&QObject::deleteLater)> var(
pointer,
QObject::deleteLater);
但它对我来说太丑了,无法使用。有什么好办法吗?
【问题讨论】:
-
您是否尝试过在 QObject::deleteLater 之前删除 &。我不确定模板参数是否需要指针或函数本身。
-
我已经尝试了所有可能的变体。
-
在这种情况下,我会在 deletelater 周围编写一个简单的模板函数包装器,它接受一个对象并在其上调用 deletelater 方法。
-
IE:
template<typename T> function deleteLaterFunc(T foo) { foo.deleteLater() }或一些变体。 -
你被 std::bind、std::mem_fun 或 lambda 卡住了,你不能仅仅因为 unique_ptr 试图更通用并期望一个可调用的,就在这个上下文中使用成员 func 指针。