Что эквивалентно & в ObjC?

0

Очень поздно. Я был бы признателен, если вы скажете мне, что эквивалент 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];
    }
}
  • 0
    &var1 на каком языке? Если вы исходите из языка, основанного на C , эквивалентом &var1 в Objective-C , вероятно, является &var1 .
  • 0
    Objective-C является надмножеством языка C. Pointer все еще работает почти так же.
Теги:

3 ответа

1
Лучший ответ

Прямого эквивалента нет. Это & из C++ указывает ссылочный тип и имеет конкретное значение для создания по существу другого имени для одной и той же переменной и позволяет передавать вещи, такие как целые числа, в функции и позволяет вызываемому изменять версию вызывающего абонента напрямую.

ObjC не допускает такой точной семантики. Как правило, вы хотите вернуться к традиционному способу передачи по ссылке, который должен использовать указатель. То, как вы напишете, что метод обхода в ObjC - это что-то вроде this--, вы передадите в массив, который вы создали в другом месте, и он заполнит его.

- (void)addToHierarchy:(NSMutableArray *)hierarchy
{
    [hierarchy addObject:self];
    for (T * child in [self children]) {
        [child addToHierarchy:hierarchy];
    }
}
  • 0
    То есть код, который я разместил, должен работать правильно? Или я должен использовать только один *, а не два **.
  • 1
    @MartiMarkov: Не совсем. Ваш метод настроен на получение указателя на указатель (два ** ), но в вашем рекурсивном случае вы разыменовываете его и, таким образом, передаете только указатель на объект, поэтому компилятору это не понравится , Снаружи это может работать, но не идиоматично. Внешний вызываемый должен создать изменяемый массив, а затем передать адрес своего указателя, что не нужно. Версия, которую я разместил, должна делать то же самое и, вероятно, немного чище.
1

Один пример - тысячи слов...

    NSError *error = nil;
NSArray *result = [moc executeFetchRequest:req error:&error];
if (!result && error) {
    NSLog(@"DAO :: banks --> %@", error);
    return nil;
}
0

Эквивалент C & в объективе-C все еще & и имеет точно такое же поведение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню