Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
161 views
in Technique[技术] by (71.8m points)

c++ - Assigning pointer to member function

I'm following up on an earlier question, however my question pertains to type issues.

How do I assign a pointer to member function C::f() to the m pointer?

Does the member function need to be static?

#include <iostream>
using namespace std;

struct nullpt_t {
    template<class T>
    inline operator T*() const { return 0; }
    
    template<class C, class T>
    inline operator T C::*() const { return 0; }
};
nullpt_t nullpt;
    
struct C {
    void f() {cout << "here" << endl;}
};
    
int main(void)
{
    int *ptr = nullpt;       
    void (C::*m)() = nullpt;
    // now assign m with member function f()?
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

All you have to do is take a pointer to the member function and assign it:

m = &C::f;

This only applies to non-static functions. Static functions have no instance associated with them, so you can take a standard function pointer to them. (Pointer-to-member is special because you have to supply an instance to dereference the pointer. Note that you don't have to do this when invoking a static member function normally.)

struct C {
    void f() {cout << "here" << endl;}
    static void g() {cout << "here static" << endl;}
};

int main() {
    // Pointer-to-member-function (non-static)
    void (C::*m)() = &C::f;
    // Standard function pointer (static)
    void (*n)() = &C::g;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.9k users

...