pointer to const member function typedef

前端 未结 3 1670
长情又很酷
长情又很酷 2021-01-01 11:36

I know it\'s possible to separate to create a pointer to member function like this

struct K { void func() {} };
typedef void FuncType();
typedef FuncType K::         


        
相关标签:
3条回答
  • 2021-01-01 12:13

    You want this:

    typedef void (K::*MemFuncType)() const;
    

    If you want to still base MemFuncType on FuncType, you need to change FuncType:

    typedef void FuncType() const;
    typedef FuncType K::* MemFuncType;
    
    0 讨论(0)
  • 2021-01-01 12:13

    A slight refinement showing how to do it without a typedef. In a deduced context like the following, you can't use a typedef.

    template <typename Class, typename Field>
    Field extract_field(const Class& obj, Field (Class::*getter)() const)
    {
       return (obj.*getter)();
    }
    

    applied to some class with a const getter:

    class Foo {
     public:
      int get_int() const;
    };
    
    Foo obj;
    int sz = extract_field(obj, &Foo::get_int);
    
    0 讨论(0)
  • 2021-01-01 12:23

    Another more direct way to do it (avoiding using and typedefs) is this:

    #include <iostream>
    
    class Object
    {
        int i_;
    public:
        int j_;
        Object()
            : Object(0,0)
        {}
        Object(int i, int j)
            : i_(i),
            j_(j)
        {}
    
        void printIplusJplusArgConst(int arg) const
        {
            std::cout << i_ + j_ + arg << '\n';
        }
    };
    
    int main(void)
    {
        void (Object::*mpc)(int) const = &Object::printIplusJplusArgConst;
    
        Object o{1,2};
        (o.*mpc)(3);    // prints 6
    
        return 0;
    }
    

    mpc is a const method pointer to Object.

    0 讨论(0)
提交回复
热议问题