【发布时间】:2016-08-17 20:13:18
【问题描述】:
我有以下代码:
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调用非const函数。其中一个函数是const而另一个不是,这可能是有原因的。如果不是这样,只需修改const限定符。 -
上面的评论(@FrankPuffer)应该被认为是这个问题 IMO 的正确答案。如果这些函数的“常量”确实不同,那么不要从 const 函数中调用非 const 函数。如果它们没有不同,则只需更改(不正确的)声明。