【问题标题】:Structure deference not working?结构尊重不起作用?
【发布时间】:2014-06-15 15:24:01
【问题描述】:

为什么以下内容无效?

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;
}

英文的错误是这样的(我不明白英文):

'-&gt;*' : improper usage, left operand of type 'std::shared_ptr&lt;ListenerCardsChange&gt;'

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

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

【问题讨论】:

    标签: c++11 raii


    【解决方案1】:

    那是因为shared_ptr&lt;T&gt;,还有unique_ptr&lt;T, D&gt;,不要超载operator-&gt;*。这可以说是一个缺陷,但我没有考虑太多,也不能 100% 确定这没有什么原因。

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

    【讨论】:

    • ->* 是单个运算符吗?我虽然是 operator->(ptr) + operator*(f)
    • @SergeProfafilecebook:如果存在某种可以列出 C++ 运算符的神奇参考...(从头开始,那么我仍然会爬行大约 10k 代表)
    猜你喜欢
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多