如何通过指向常量对象的指针,调用成员函数指针来执行成员函数?

2026-04-16 18:053阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计313个文字,预计阅读时间需要2分钟。

如何通过指向常量对象的指针,调用成员函数指针来执行成员函数?

这是一个想要实现的例子,以及如何实现:

cppclass MyClass {public: void Dummy() const { // 实现代码 }};

typedef void (MyClass::MemFunc)();

void (*func)(const MyClass* instance)=MyClass::Dummy;

// 这里会报错,因为 Dummy 函数是 const 类型,不能被非 const 类型的指针调用

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

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成员函数的函数类型不同.这就是类型必须匹配的原因.

标签:指针调用

本文共计313个文字,预计阅读时间需要2分钟。

如何通过指向常量对象的指针,调用成员函数指针来执行成员函数?

这是一个想要实现的例子,以及如何实现:

cppclass MyClass {public: void Dummy() const { // 实现代码 }};

typedef void (MyClass::MemFunc)();

void (*func)(const MyClass* instance)=MyClass::Dummy;

// 这里会报错,因为 Dummy 函数是 const 类型,不能被非 const 类型的指针调用

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

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成员函数的函数类型不同.这就是类型必须匹配的原因.

标签:指针调用