Редактировать: Я неправильно понял ваш вопрос.
Отказ от ответственности: у меня нет доступа к инструментальной цепочке iOS на момент написания этой статьи, чтобы проверить информацию Objective-C, но яЯ уверен в этом ответе, основываясь на моем прошлом опыте работы с Objective-C и iOS.
Среда выполнения Objective-C обеспечивает самоанализ типа.
Если член C ++ является полем:
Используйте технику из этого поста или аналогичную, затем выделите интересующий вас ивар.
Если вы используете технику петли из вышеупомянутого поста:
if (strcmp(name, "target_field") == 0) {
ptrdiff_t offset = ivar_getOffset(var);
CppObject* cppObject = (CppObject*)(((ptrdiff_t*)&targetObjcInst) + offset);
// Access the public members of CppObject...
}
ЕслиЧлен C ++ - это свойство:
Если бы вы просто обращались к значению свойства Obj-C, я бы сказал, следуйте этому ответу и назовите его днем, но поскольку это значение свойства C ++, подробностинеясно.Я не уверен, что это даже возможно.
C ++ имеет концепцию дружба , обеспечивающую доступ к закрытым членам одного типа из другого.
то есть
class A;
class B {
friend class A;
int C;
};
class A {
int D;
int sum(const B& b) {
return b.C + D;
}
};
Это не распространяется на Objective-C.За исключением какого-то конкретного расширения компилятора, о котором я не знаю, интерфейсы Obj-C не могут быть «друзьями» с типами C ++, поэтому Obj-C не может получить доступ к закрытым компонентам типов C ++.Предоставление публичного доступа / мутатора или обнародование поля - ваши единственные переносимые варианты.