Переменная C++, заявляемая в теле функции, но не участнике класса?

Я хочу создать класс C++ со следующим типом:

  1. Это может быть объявлено в функции.
  2. Это может быть объявлено в функции членства.
  3. Это не может быть объявлено как участник класса.

Использование этого: думайте "Корневые" объекты для GC.

Действительно ли это возможно в C++? В частности, я использую g ++. Готовый переключиться на лязг. Или шаблоны или макро-прекрасное решение.

Спасибо!

6
задан Suma 23 March 2010 в 08:04
поделиться

2 ответа

Вы могли бы сделать это с помощью макроса, например:

#define MY_TYPE \
    do { } while(0); \
    RealType

void foo() {
    MY_TYPE myvar;
    myvar.Whatever();
}

Это будет компилироваться только внутри функции (из-за "do ... while "бит - хотя вы получите действительно странное сообщение об ошибке). Похоже, это одно из тех "злых" применений макросов, которых вы хотели бы избегать, однако ...

16
ответ дан 8 December 2019 в 14:42
поделиться

Несмотря на то, что я должен полюбить ответ codeka , я не могу не представить, в чем проблема с объявлением атрибута member.

Для чего-то вроде корня сборщика мусора я, вероятно, использовал бы шаблон Monoid . Все экземпляры класса фактически являются прокси для синглтона (по сути), то есть все они имеют одно и то же состояние. Таким образом, не имеет значения, сколько экземпляров создано, все они указывают на один и тот же ресурс.

Если вы сделаете это, чтобы избежать циклических ссылок, боюсь, этого недостаточно.

struct A { boost::shared_ptr<B> mB; };

struct B { boost::shared_ptr<A> mA; };
0
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: