为何选择班级名称" B"必须在传递"& B :: f1"时明确指定;作为论点?

时间:2016-09-20 08:52:52

标签: c++ function-pointers

为什么有必要将非静态函数指针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 ++被设计为这样的演绎?

是否有简单的方法/技巧(例如添加非常短的代码)来强制执行扣除?

0 个答案:

没有答案