2012-07-05 137 views
4

我有函數聲明如下常量無效*指針轉換爲特定的類指針

void func1(const void& * pThis) { 
    MyClass* pMyClass = static_cast<MyClass*>(pThis); //....I use PMyClass pointer. 
} 

我收到錯誤不能轉換const void*MyClass*

如何做到這一步?

+0

你的意思是把'const'限定符作爲演員的一部分嗎?如果是這樣,你還需要一個'const_cast';否則,您需要將其強制轉換爲'const MyClass *'而不是... – reuben

+3

'const void&* pThis應該不會編譯,因爲不允許指向引用:http://ideone.com/XAzWA ......在這種情況下,還有另一個問題:「無效&」甚至沒有意義。 – Nawaz

+0

'const void *'指向不應該被修改的內存。 一個void *(非const)指向可以被修改的內存(但不能通過void *;你必須首先將它拋出)。 – jmishra

回答

5

您可以

MyClass* pMyClass = const_cast<MyClass*>(static_cast<const MyClass*>(pThis)); 

但這種可怕的語法提示:爲什麼那麼函數有一個const的說法,難道你不希望它像

void func1(void * pThis) { 

當然,你可以採用C風格演繹捷徑:

MyClass* pMyClass = (MyClass*)pThis; 

但是如果可能的話我會修改設計。

+0

最重要的是,如果指針指向的是一個實際爲「const」的對象,那麼以非const方式訪問它是未定義的行爲。 'const_cast'只能用於非常特殊的情況,絕不輕鬆。 –

4

const是問題所在。它不能使用static_cast丟棄。鑑於你將它轉換爲非const MyClass,無論如何,接受const參數都沒有用處。你可以使用const_cast去除常量,但那會很糟糕 - 你的方法聲明它不會改變參數,但它實際上正在改變它。