2012-12-11 22 views
1
#define test(p) (typeof(*(*p)) *) 

上述宏在pvoid **而不是其他內容時失敗。如何在運行時使用typeof創建void *指針

它在c中工作,但不在C++中。是否有任何圍繞C++做到這一點?

+0

我認爲你必須使用類似的dynamic_cast [檢查出來了網頁(http://www.cplusplus.com/doc/tutorial/typecasting/) – Pavenhimself

+3

'typeof'「在運行時」?你究竟想在這裏測試什麼?只是爲了檢查,這是與GCC? –

+0

基本上,當p是int **時,我使用該宏來執行int *類型轉換。但是當p無效時,它會失敗並報錯**。 –

回答

1

在C++(11)中有remove_pointer,它返回輸入類型參數指向的類型。

基本上,當p是int **時,我使用該宏來執行int *類型轉換。但是,當p無效時,它會失敗,錯誤** [...]不,我不能使用typeof(* p),因爲這個宏也需要確保p是一個雙指針。

如果演員陣容是你需要的一個簡單的功能模板應該有所幫助。

template<typename T> 
T* remove_pointer_cast(T** p) 
{ 
    return (T*)(p); 
}