我想创建一个具有以下类型的C ++类:
使用此方法:考虑GC的“Root”对象。
这在C ++中是否可行?特别是,我正在使用g ++。愿意切换到铿锵声。模板或宏解决方案都很好。
谢谢!
答案 0 :(得分:16)
你可以用宏来做,也许:
#define MY_TYPE \
do { } while(0); \
RealType
void foo() {
MY_TYPE myvar;
myvar.Whatever();
}
这只会在函数内部编译(因为“do ... while”位 - 尽管你会得到一个非常奇怪的错误消息)。这似乎是你想要避免的宏的“邪恶”用途之一,但是......
答案 1 :(得分:0)
即使我喜欢codeka
的答案,我也不得不想象声明作为成员属性的问题是什么。
对于类似GC根的东西,我可能会使用Monoid
模式。该类的所有实例实际上都是Singleton
的代理(实质上),即它们都共享相同的状态。这样,实例化的数量无关紧要,它们都指向相同的资源。
如果你这样做是为了避免循环引用,恐怕还不够。
struct A { boost::shared_ptr<B> mB; };
struct B { boost::shared_ptr<A> mA; };