定义与在C ++中返回对象的函数相同的宏

时间:2015-06-10 23:33:48

标签: c++ static macros singleton

所以我按照我想要的方式运行单例模式,我认为主要问题是指针和参考。 (“......”表示无关紧要的代码)。

Universe.h

...    
#define TheUniverse Universe::GetInstance ();
...
public:
static Universe& GetInstance ();
...
private:
static Universe* x_instance;
...

Universe.cpp

...
Universe* Universe::x_instance = NULL;
...
    Universe& Universe::GetInstance ()
{
    if ( x_instance == NULL )
    {
        x_instance = new Universe ();
    }
    return *x_instance;
}
...

Main.cpp的

...
//This Works
Universe& universe = TheUniverse;

universe.Initialize();

//This also Works
Universe::GetInstance().Initialize();
//This Does Not (and I do not know why)
TheUniverse.Initialize();
//CMake says "error: expected primary-expression before '.' token TheUniverse.Initizlize();"

那么,为什么我必须先将TheUniverse宏设置为变量才能使用它?有没有办法绕过这个而不必使用变量?

1 个答案:

答案 0 :(得分:3)

问题是您使用分号将TheUniverse定义为Universe::GetInstance();。因此,在处理宏之后,您会得到Universe::GetInstance();.Initialize();,这显然不是您想要的。要解决此问题,只需删除宏定义中的分号。