C++11 结构差异不起作用?

C++11 结构差异不起作用?,c++11,raii,C++11,Raii,为什么以下内容无效 bool trigger(t_evt evt) const { std::shared_ptr<I> ptr = this->instance.lock(); if (!ptr) { return false; } (ptr->*f)(evt); // -> causes a compilation error return true; } bool触发器(t_evt evt)常数{

为什么以下内容无效

bool trigger(t_evt evt) const {
    std::shared_ptr<I> ptr = this->instance.lock();

    if (!ptr) {
        return false;
    }

    (ptr->*f)(evt); // -> causes a compilation error

    return true;
}
bool触发器(t_evt evt)常数{
std::shared_ptr ptr=this->instance.lock();
如果(!ptr){
返回false;
}
(ptr->*f)(evt);//->导致编译错误
返回true;
}
英语中的错误是这样的(我不懂英语):

'->*':使用不当,左操作数类型为“std::shared\u ptr”

f是指向成员函数的指针


注意,
(*ptr.*f)(evt)工作正常。

这是因为
共享的\u ptr
,以及
唯一的\u ptr
,不会使
操作员->*
过载。这可以说是一个缺陷,但我没有考虑太多,也不能100%确定这其中是否有原因


使用
(*ptr.*f)(evt)
语法。

是一个操作符吗?我认为它是运算符>(PTR)+运算符*(f)@ SergPrForFraceCeoBoo:如果只存在某种类型的魔法引用,则列出C++操作符…(划破这一点,那么我还是会爬上10公里的距离)@KerrekSB