为什么有必要将非静态函数指针B::f1
作为函数cFunc()
的参数传递显式类名B::
?< / p>
这是一个可编辑的代码。我怀疑为什么行[1]没问题,但[2]失败了。
class C{
public: template<class BI> void cFunc(
BI* bPtr,
void (BI::*bF1 )() )
{
auto sys_crashListener = std::bind(bF1, *bPtr);
}
};
class B{
void f1(){ }
void test(){
C* cPtr;
cPtr->setCrashListener(this,&B::f1); //ok [1]
//cPtr->setCrashListener(this,&f1); //compile fail [2]
// compile error "ISO C++ forbids taking the address of an unqualified"
}
};
我位于B
的本地范围内,因此肯定是B::
为什么C ++被设计为不这样的演绎?
是否有简单的方法/技巧(例如添加非常短的代码)来强制执行扣除?