指向const成员函数typedef的指针

old*_*cig 22 c++ pointers function member

我知道可以分开创建一个指向成员函数的指针

struct K { void func() {} };
typedef void FuncType();
typedef FuncType K::* MemFuncType;
MemFuncType pF = &K::func;
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法来构造指向const函数的指针?我尝试在各个地方添加const但没有成功.我已经玩了一些gcc,如果你做类似的模板演绎

template <typename Sig, typename Klass>
void deduce(Sig Klass::*);
Run Code Online (Sandbox Code Playgroud)

它会将Sig作为函数签名显示,并在最后添加const.如果要在代码中执行此操作,则会抱怨您无法在函数类型上使用限定符.看起来它应该是可能的,因为演绎有效.

R S*_*hko 34

你要这个:

typedef void (K::*MemFuncType)() const;
Run Code Online (Sandbox Code Playgroud)

如果您仍然希望MemFuncType依赖FuncType,则需要更改FuncType:

typedef void FuncType() const;
typedef FuncType K::* MemFuncType;
Run Code Online (Sandbox Code Playgroud)


小智 8

稍微改进一下,显示如何在没有typedef的情况下进行操作.在如下所示的推断上下文中,您不能使用typedef.

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

用const getter应用于某个类:

class Foo {
 public:
  int get_int() const;
};

Foo obj;
int sz = extract_field(obj, &Foo::get_int);
Run Code Online (Sandbox Code Playgroud)