Очень поздно. Я был бы признателен, если вы скажете мне, что эквивалент Objective-C C++:
&var1
в ObjC. И когда я использую его в коде C++, я использую его как var1;
Я думаю, это должно быть
**var1
Или я ошибаюсь?
РЕДАКТИРОВАТЬ:
кода в C++:
void getHierarchy(Vector<T*> &hierarchy) {
for(int i = 0; i < childs.size(); i++) {
childs[i]->getHierarchy(hierarchy);
}
}
код в ObjC:
-(void) getHierarchy: (NSMutableArray **) hierarchy {
[*hierarchy addObject:self];
for (T *child in [self childs]) {
[child getHierarchy:*hierarchy];
}
}
Прямого эквивалента нет. Это &
из C++ указывает ссылочный тип и имеет конкретное значение для создания по существу другого имени для одной и той же переменной и позволяет передавать вещи, такие как целые числа, в функции и позволяет вызываемому изменять версию вызывающего абонента напрямую.
ObjC не допускает такой точной семантики. Как правило, вы хотите вернуться к традиционному способу передачи по ссылке, который должен использовать указатель. То, как вы напишете, что метод обхода в ObjC - это что-то вроде this--, вы передадите в массив, который вы создали в другом месте, и он заполнит его.
- (void)addToHierarchy:(NSMutableArray *)hierarchy
{
[hierarchy addObject:self];
for (T * child in [self children]) {
[child addToHierarchy:hierarchy];
}
}
**
), но в вашем рекурсивном случае вы разыменовываете его и, таким образом, передаете только указатель на объект, поэтому компилятору это не понравится , Снаружи это может работать, но не идиоматично. Внешний вызываемый должен создать изменяемый массив, а затем передать адрес своего указателя, что не нужно. Версия, которую я разместил, должна делать то же самое и, вероятно, немного чище.
Один пример - тысячи слов...
NSError *error = nil;
NSArray *result = [moc executeFetchRequest:req error:&error];
if (!result && error) {
NSLog(@"DAO :: banks --> %@", error);
return nil;
}
Эквивалент C &
в объективе-C все еще &
и имеет точно такое же поведение.
&var1
на каком языке? Если вы исходите из языка, основанного наC
, эквивалентом&var1
вObjective-C
, вероятно, является&var1
.