我有以下代碼:調用從const成員函數非const成員函數指針
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'限定符。 –
上面的評論(by @FrankPuffer)應該被認爲是IMO這個問題的正確答案。如果這些函數的「常量」確實不同,那麼**不要在const函數內調用非const函數。如果他們沒有不同,那麼只需更改(不正確)的聲明。 –