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::* MemFuncType; MemFuncType pF = &K::func;
Is there similar way to construct a pointer to a const function? I've tried adding const in various places with no success. I've played around with gcc some and if you do template deduction on something like
template <typename Sig, typename Klass> void deduce(Sig Klass::*);
It will show Sig with as a function signature with const just tacked on the end. If to do this in code it will complain that you can't have qualifiers on a function type. Seems like it should be possible somehow because the deduction works.
A typedef, or a function-type alias, helps to define pointers to executable code within memory. Simply put, a typedef can be used as a pointer that references a function.
The pointer to member operators . * and ->* are used to bind a pointer to a member of a specific class object. Because the precedence of () (function call operator) is higher than . * and ->* , you must use parentheses to call the function pointed to by ptf .
the constructor is the first function which get called. and we can access the this pointer via constructor for the first time. if we are able to get the this pointer before constructor call (may be via malloc which will not call constructor at all), we can call member function even before constructor call.
Passing Pointers to Functions in C++ C++ allows you to pass a pointer to a function. To do so, simply declare the function parameter as a pointer type.
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;
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With