在 C++ 中定义等同于 return 对象的函数的宏

Defining Macros that are equal to functions that return objects in C++

所以我让单例模式按照我想要的方式工作,我认为主要问题是指针和引用。 (“...”代表不相关的代码)。

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 宏设置为变量才能使用它?有没有办法让我绕过这个而不必使用变量?

问题是您将 TheUniverse 定义为带有分号的 Universe::GetInstance();。因此,宏处理后得到的Universe::GetInstance();.Initialize();显然不是你想要的。要解决此问题,只需删除宏定义中的分号即可。