c – 如何使用指向常量对象的指针调用成员函数指针?
发布时间:2020-12-16 09:23:45 所属栏目:百科 来源:网络整理
导读:这是我想要完成的一个例子以及如何: class MyClass{ public: void Dummy() const{}};typedef void (MyClass::*MemFunc)();void (const MyClass * instance){ MemFunc func=MyClass::Dummy; // (instance-*func)(); //gives an error (const_castMyClass *in
这是我想要完成的一个例子以及如何:
class MyClass { public: void Dummy() const{} }; typedef void (MyClass::*MemFunc)(); void (const MyClass * instance) { MemFunc func=&MyClass::Dummy; // (instance->*func)(); //gives an error (const_cast<MyClass *>instance->*func)(); // works } 为什么编译器(gcc 3& 4)坚持认为实例应该是非const的?那个const_cast会引起问题吗? 仅供参考:instance`不一定是const,我只是不希望被叫者搞砸它. 这里发生了什么? 解决方法
错误在之前的行中.将typedef更改为
typedef void (MyClass::*MemFunc)() const; 使其成为const成员函数类型的指针. 在考虑此代码及其工作原理时,差异可能会更明显: typedef void FunctionType() const; typedef FunctionType MyClass::*MemFunc; 特别是成员函数指针实际上只是成员指针的特殊情况.对于const成员函数,成员函数的函数类型与非const成员函数的函数类型不同.这就是类型必须匹配的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |