Типирование в Objective C - PullRequest
1 голос
/ 18 мая 2011

In cpp

EBD_HEADER* pHeader;

pHeader = reinterpret_cast <EBD_HEADER*>(reinterpret_cast<void*>(const_cast <char*> (GetHeader())));

In Objective C

EBD_HEADER* pHeader;

pHeader = (EBD_HEADER*)((void*)((char*)([self GetHeader])));

Зачем нужно столько бросковНеправильно ли конвертировать его в (EBD_HEADER *) [self GetHeader];

1 Ответ

4 голосов
/ 18 мая 2011

Вам не нужно так много приведений в C / Objective-C, вам просто нужно использовать одно приведение для простоты:

pHeader = (EBD_HEADER*)[self GetHeader];

При использовании приведений в стиле C ++ вам нужно два приведения, потому что одно отбрасываетconst -ness и другой интерпретируют указатель на один тип для указателя на другой тип;промежуточное приведение к void* является избыточным и должно быть удалено.

Однако в этом случае вы должны попытаться изменить код так, чтобы вам вообще не требовалось никаких приведений.Почему [self GetHeader] возвращает const char* вместо EBD_HEADER*?Возвращен ли объект на самом деле постоянным?Если это так, вы должны объявить pHeader как const EBD_HEADER*, и вы не должны отбрасывать const -ness;если нет, то [self GetHeader] не должен возвращать тип const.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...