1

これを簡単に行う方法が実際にあるかどうかを知る必要があります。これは私がやりたいことのほんの一例です...

void* ptr;
ptr = new Foo;
((Foo*)ptr)->member1 = some_val;
((Foo*)ptr)->member2 = some_val;
((Foo*)ptr)->member3 = some_val;
((Foo*)ptr)->member4 = some_val;
((Foo*)ptr)->member5 = some_val;
((Foo*)ptr)->member6 = some_val;

ptrはvoid*なので、とにかくptrタイプを一時的に変更して、使用するたびにキャストする必要がないようにすることはできますか?

ptrは他の場所で使用されており、void型である必要があるため、Foo型の別のポインタを作成することはできません。だから、私がしなければならないすべての厄介なキャストを避けるために、一時的にタイプFooにすることを推測します。

**一部の人々は混乱しているようです...プログラムでは次のように使用されるため、ptrはvoid型のままにする必要があります:-

void* ptr;
switch (bar)
{
    case 1:
       ptr = new Foo;
       ((Foo*)ptr)->member1 = some_val;
       ((Foo*)ptr)->member2 = some_val;
       ((Foo*)ptr)->member3 = some_val;
       ((Foo*)ptr)->member4 = some_val;
       ((Foo*)ptr)->member5 = some_val;
       ((Foo*)ptr)->member6 = some_val;
    case 2:
       ptr = new Doo;
       ...
    case 3:
       ptr = new Scooby;
       ...

したがって、ptrはvoid型のままにする必要があります。ptrを別のタイプにキャストする一時的な方法があるかどうかを知りたかったので、キャストを避けてください...

4

2 に答える 2

1

一時ポインタを作成できない理由がわかりません。

void* ptr;
ptr = new Foo;
{
Foo *pt=(Foo*)ptr;
 pt->member1 = some_val;
 pt->member2 = some_val;
 pt->member3 = some_val;
 pt->member4 = some_val;
 pt->member5 = some_val;
 pt->member6 = some_val;
} 
void *t=ptr; // the original ptr

時々私は使用します:

Foo &f= *((Foo*)ptr);
 f.member1 = some_val;
 f.member2 = some_val;
 f.member3 = some_val;
 f.member4 = some_val;
 f.member5 = some_val;
 f.member6 = some_val;
于 2013-02-27T18:46:48.673 に答える
0

編集:元の質問が変更されたため、この回答は廃止されました。

次を使用できます。

Foo* ptr;

ptr = new Foo;
ptr->member1 = some_val;
ptr->member2 = some_val;
ptr->member3 = some_val;

また

void* ptrFromElseWhere;
Foo* ptr = static_cast<Foo*>(ptrFromElseWhere);

ptr->member1 = some_val;
ptr->member2 = some_val;
ptr->member3 = some_val;
于 2013-02-27T18:25:12.087 に答える