使用decltype获取函数引用(this)

时间:2017-07-03 19:28:22

标签: c++ qt c++11 visual-studio-2013

我正在尝试创建一个宏来安装和删除从lambda构造的Qt事件过滤器。在这种情况下,this已知为QObject,因此会员destroyedfilter只是一些QObject派生的事件过滤器。但是我对该行有一个问题:

connect(this, &decltype(this)::destroyed, [filter]() 
{ 
    qApp->removeEventFilter(filter); 
    filter->deleteLater();
});

给出了(MSVC2013)错误:

  '::'左边的

必须是类,结构或联合

我只是弄错了语法,还是不能这样做?

1 个答案:

答案 0 :(得分:3)

Per @ molbdnilo的评论,我没有说明this是指针的事实。使用type-trait删除指针使其工作:

connect(this, &std::remove_pointer<decltype(this)>::type::destroyed, [filter]() 
{
    qApp->removeEventFilter(filter);
    filter->deleteLater();
});
相关问题