C ++变量在函数体中声明,但不是类成员?

时间:2010-03-23 05:23:21

标签: c++ variables declaration

我想创建一个具有以下类型的C ++类:

  1. 可以在函数内声明。
  2. 可以在成员函数内声明。
  3. 不能将其声明为类成员。
  4. 使用此方法:考虑GC的“Root”对象。

    这在C ++中是否可行?特别是,我正在使用g ++。愿意切换到铿锵声。模板或宏解决方案都很好。

    谢谢!

2 个答案:

答案 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; };