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)