【问题标题】:Pointer to class method指向类方法的指针
【发布时间】:2010-12-05 14:15:14
【问题描述】:

我试图有指向类方法的指针,所以我有类似的东西:

class foo {
    public:
    static void bar() {
}
};

void (foo::*bar)() = &foo::bar;

那不编译:(我明白了:

> error: cannot convert ‘void (*)()’ to
> ‘void (foo::*)()’ in
> initialization

【问题讨论】:

    标签: c++ class methods pointers


    【解决方案1】:

    指向静态成员的指针与指向非成员的指针具有相同的类型。

    试试:

    void (*bar)() = &foo::bar;
    

    【讨论】:

    • tnx 快速回答 :)
    【解决方案2】:

    bar()是一个静态函数,也就是说没有this参数。

    void (*myfunptr)() = &(foo::bar);
    

    【讨论】:

    • tnx 快速回答 :)
    【解决方案3】:

    静态方法,当通过名称使用而不是调用时,是一个指针。

    void (*bar)() = foo::bar; // used as a name, it's a function pointer
    ...
    bar(); // calls it
    

    【讨论】:

    • tnx 快速回答 :)
    • 不,它不是一个指针,它是一个函数。它确实衰减到一个函数指针。
    • 为什么其他问题在 foo::bar 前面有 &。引用运算符最终是否必要?
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多