dispatch_apply с объявлением локальной переменной не компилируется в реализации метода C++

Код

class XXX
{
   vector<Record> getAll()
   {
      dispatch_apply(3, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) {
        for (int j = 0; j < ...; ++j)
        { ... }
      });
    }
}

не компилируется, говоря, что «int XXX::j» не является статическим членом «класса». документация по блокам говорит: «Локальные переменные, объявленные в пределах лексической области действия блока, ведут себя точно так же, как локальные переменные в функции». Файл имеет расширение .mm. Я что-то пропустил?


person fspirit    schedule 11.04.2011    source источник


Ответы (1)


Ваш код правильный, и clang его скомпилирует. В целом поддержка блоков C++ в clang намного лучше, чем в gcc, и вы хотите использовать ее, если можете. Если вам нужно использовать gcc, есть обходной путь, используйте ::j для ссылки на j. Однако это незаконный C++, и clang задохнется от него, поэтому вы можете сделать его условным в зависимости от того, какой компилятор задействован...

person Stripes    schedule 09.05.2011