Я хочу создать класс C++ со следующим типом:
Использование этого: думайте "Корневые" объекты для GC.
Действительно ли это возможно в C++? В частности, я использую g ++. Готовый переключиться на лязг. Или шаблоны или макро-прекрасное решение.
Спасибо!
Вы могли бы сделать это с помощью макроса, например:
#define MY_TYPE \
do { } while(0); \
RealType
void foo() {
MY_TYPE myvar;
myvar.Whatever();
}
Это будет компилироваться только внутри функции (из-за "do ... while "бит - хотя вы получите действительно странное сообщение об ошибке). Похоже, это одно из тех "злых" применений макросов, которых вы хотели бы избегать, однако ...
Несмотря на то, что я должен полюбить ответ codeka
, я не могу не представить, в чем проблема с объявлением атрибута member.
Для чего-то вроде корня сборщика мусора я, вероятно, использовал бы шаблон Monoid
. Все экземпляры класса фактически являются прокси для синглтона
(по сути), то есть все они имеют одно и то же состояние. Таким образом, не имеет значения, сколько экземпляров создано, все они указывают на один и тот же ресурс.
Если вы сделаете это, чтобы избежать циклических ссылок, боюсь, этого недостаточно.
struct A { boost::shared_ptr<B> mB; };
struct B { boost::shared_ptr<A> mA; };