当前位置:  开发笔记 > 编程语言 > 正文

如何使用指向常量对象的指针调用成员函数指针?

如何解决《如何使用指向常量对象的指针调用成员函数指针?》经验,为你挑选了1个好方法。

这是我想要完成的一个例子以及如何:

class MyClass
{
     public: 
         void Dummy() const{}

};
typedef void (MyClass::*MemFunc)();

void  (const MyClass * instance)
{
     MemFunc func=&MyClass::Dummy;
     // (instance->*func)(); //gives an error
         (const_castinstance->*func)(); // works
}

为什么编译器(gcc 3和4)坚持认为实例应该是非const的?那个const_cast会引起问题吗?

仅供参考:instance`不一定是const,我只是不希望被叫者搞砸它.

这里发生了什么?



1> Johannes Sch..:

错误在之前的行中.将typedef更改为

typedef void (MyClass::*MemFunc)() const;

使其成为const成员函数类型的指针.

在考虑此代码及其工作原理时,差异可能会更明显:

typedef void FunctionType() const;
typedef FunctionType MyClass::*MemFunc;

特别是成员函数指针实际上只是成员指针的特殊情况.对于const成员函数,成员函数的函数类型与非const成员函数的函数类型不同.这就是类型必须匹配的原因.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有