[英]Dereferencing an array of void pointers
假設我有一個指向不同類型對象的void指針數組,我想通過一個函數傳遞它們並將它們轉換為各自類型的指針,我將如何進行此操作? 我已經嘗試過這個當前代碼,但是我收到錯誤:
'void *'不是指向對象的指針類型
objectA myObjectA;
objectB myObjectB;
objectC myObjectC;
objectD myObjectD;
void *data[4];
data[0] = static_cast<void *>( &myObjectA );
data[1] = static_cast<void *>( &myObjectB );
data[2] = static_cast<void *>( &myObjectC );
data[3] = static_cast<void *>( &myObjectD );
void dereference( void *data )
{
objectA *objA_ptr = static_cast<objectA *>( data[0] );
objectB *objB_ptr = static_cast<objectB *>( data[1] );
objectC *objC_ptr = static_cast<objectC *>( data[2] );
objectD *objD_ptr = static_cast<objectD *>( data[3] );
}
有誰知道實現這個的正確方法?
編輯:對於上下文,我正在使用opencv並嘗試使用軌跡欄創建一個簡單的gui界面。 Opencv允許將userdata輸入到TrackbarCallback中,當移動滑塊時調用它,但只能以void指針的形式調用。
int createTrackbar( const string& trackbarname, const string& winname,
int* value, int count,
TrackbarCallback onChange=0,
void* userdata=0);
假設我有一個void指針數組
void deference( void *data )
這不是一個void指針數組,它是一個單獨的void指針。
將其更改為void **
,然后因為你要混合使用C和C ++樣式,為什么不使用C樣式轉換呢? :
objectA *objA_ptr = (objectA *) data[0];
從同一個基類派生所有這些。
如果您的函數需要刪除它們,則將析構函數設置為虛擬。
使你的數組BaseClass *data[4]
使你的函數void deference(BaseClass **data)
您可以使用reinterpret_cast<>()
而不是static_cast<>
。
需要正確的函數原型
void dereference(void **data)
因為你傳遞的是一個void *
數組,而且我們都知道在C和C ++中,在大多數情況下,數組表達式會被指針表達式替換。
是否有任何特殊原因必須使用指向不同類對象的指針數組? 這聞起來像是C ++問題的C解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.