我有以下代码:
class MyClass;
typedef void(MyClass::*func_ptr)();
class MyClass
{
public:
MyClass()
{
f = &MyFunc1;
}
void MyFunc1()
{
// ...
}
void MyFunc2() const
{
(this->*f)();
}
func_ptr f;
};
如果我尝试编译,它会失败,因为 MyFunc2() 是一个 const 方法,它试图调用非 const 类型的 func_ptr 的函数指针。
我正在尝试找出最佳的转换方式。我可以使用标准的 C 风格转换:
typedef void(MyClass::*func_ptr2)() const;
func_ptr2 f2 = (func_ptr2)f;
(this->*f2)();
但我更愿意使用 C++ 转换(即 static_cast、reinterpret_cast 或 const_cast)。我用 reinterpret_cast 编译它,但我不能让它与 const_cast 一起工作。我认为 const_cast 不应该用于这种情况?此外,是否有更简洁的方法来执行此操作而无需创建另一个 typedef?
最佳答案
典型的解决方案是 (const_cast<MyClass*>(this)->*f)();
.
这是合法的,只要MyClass
实例已创建为非常量。
否则,这将调用未定义的行为。
关于c++ - 从 const 成员函数调用非常量成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36823606/