Имам c++ клас, който трябва да извика обективен c метод, използвайки указател към този метод. Този метод връща void и приема аргумент от тип 'status', където status е просто интегрално изброяване.
enum status
{
status_valid = 0,
status_invalid,
status_unknown
};
Имам указателя към метода obj-c, настроен така. Указателят към метода също се предава на класа c++ и
typedef void (*FuncPtr) (status);
FuncPtr myObjCSelectorPointer = (void (*)(status))[self methodForSelector:@selector(statusChanged: )];
cppClassInstance->setFuncPointer(myObjCSelectorPointer)
myObjCSelectorPointer се задържа от cppClass по този начин:
void cppClass::setFuncPointer(FunctPtr *ptr)
{
this->funcPtr = ptr;
}
Сега някъде другаде, когато се опитам да извикам метода, към който сочи този указател, като това:
status s;
funcPtr(s);
Методът се извиква правилно, но стойността, предадена в метода, се губи. Методът obj-c получава напълно произволна стойност. Когато се опитам да извикам метод в класа cpp по същия начин, той преминава и получава правилната стойност.
какво правя грешно Не можеш ли да извикаш обективен c метод по този начин?