为什么以下内容无效?
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);
可以正常使用。
答案 0 :(得分:1)
这是因为shared_ptr<T>
和unique_ptr<T, D>
不会超载operator->*
。这可以说是一个缺陷,但我没有想太多,并且我不能100%确定没有任何理由。
使用(*ptr.*f)(evt)
语法。