私は、さまざまな型のオブジェクトを指すvoidポインターの配列を持っていて、それらを関数に渡してそれぞれの型のポインターにキャストしたいとします。私は、この現在のコードを試してみたが、私はエラーを取得:voidポインタの配列を逆参照する
‘void*’ is not a pointer-to-object type
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では、スライダが移動されたときに呼び出されるが、voidポインタの形でのみ呼び出されるTrackbarCallbackにユーザデータを入力することができます。空ポインタの配列ではありません
int createTrackbar(const string& trackbarname, const string& winname,
int* value, int count,
TrackbarCallback onChange=0,
void* userdata=0);
私の質問は、なぜあなたは 'void * 'をまったく使っていますか?これはC++で、テンプレートがあります。 –