Мне нужно знать, есть ли на самом деле способ сделать это легко. Это просто пример того, что я хочу сделать ...Постоянное изменение типа указателя
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 пустота *, есть в любом случае, что я могу временно изменить тип PTR, так что я не должен бросить его каждый раз использовать его?
Я не могу просто создать другой указатель типа Foo, потому что ptr используется в другом месте и должен быть типа void. Поэтому, я думаю, временно сделайте это типа Foo, чтобы избежать всех беспорядочных кастингов, которые мне нужно делать.
** Кажется, некоторые люди путаться ... PTR должны оставаться типа пустоте, потому что в программе используется так: -
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 должен оставаться типа пустоты. Я просто хотел узнать, есть ли временный способ для переноса ptr на другой тип, поэтому избегайте отливки ...
Да, я думаю, единственный способ создать временный указатель. Не хотел этого делать, но все же ... –
Не бойтесь: компилятор должен быть достаточно умным, чтобы избежать потребления памяти. «pt» является идеальным кандидатом на переменную in-register. – PypeBros
Почему 'void * t = ptr; // оригинальный ptr'? Просто используйте 'ptr' снова оттуда на ... – glglgl