结构尊重不起作用?

时间:2014-06-15 15:24:01

标签: 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;
}

英语中的错误是这样的(我不会用英语获得):

'->*' : improper usage, left operand of type 'std::shared_ptr<ListenerCardsChange>'

f是指向成员函数的指针。

请注意,(*ptr.*f)(evt);可以正常使用。

1 个答案:

答案 0 :(得分:1)

这是因为shared_ptr<T>unique_ptr<T, D>不会超载operator->*。这可以说是一个缺陷,但我没有想太多,并且我不能100%确定没有任何理由。

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