LINUX.ORG.RU

Можно ли кастовать указатели на оbj-c-шные классы в void* и обратно?

 , ,


0

1

Суть такова: есть код на Objective C++, компилируется с помощью GCC-LLVM, в нем есть класс С++, в конструкторе которого создаётся экземпляр obj-c класса. Можно ли указатель на него кастовать в void*, а потом в деструкторе кастовать обратно с целью вызвать release?

cppclass.h:
class CPPClass
{
void *m_ptr;
}

cppclass.mm:

@interface objclass
{
NSString *m_blabla;
}
- (id)init;
@end

CPPClass::CPPClass()
{
m_ptr = (void*) [[objclass alloc] init];
}

CPPClass::~CPPClass()
{
objclass *p = (objclass*) m_ptr;
[p release];
}

Зачем такое извращение? Компилятор почему-то не даёт объявить objclass в заголовочном файле. Eсли же в нём сделать forward-declaration «class objclass;» для указателя, то потом ругается на переопределение objclass внутри .mm файла.

Ну или макфак какой-нибудь по теме посоветуйте.

obj-c вижу впервые в жизни и вообще он не нужен и писать на нём дальше не планирую :)

★★★★★

Последнее исправление: Harald (всего исправлений: 1)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.