gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:19:30 28 4
gpt4 key购买 nike

这是我想要完成的事情以及如何完成的示例:

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_cast 会导致问题吗?

仅供引用:instance` 不一定是 const,我只是不想让被调用者弄乱它。

这里发生了什么?

最佳答案

错误在前一行。将 typedef 更改为

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

使其成为指向常量成员函数类型的指针。

考虑这段代码及其工作原理时,区别可能会更加明显:

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

特定的成员函数指针实际上只是一般成员指针的特例。对于 const 成员函数,成员函数的函数类型不同于非 const 成员函数。这就是类型必须匹配的原因。

关于c++ - 如何使用指向常量对象的指针调用成员函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/635225/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com