在 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();
显然不是你想要的。要解决此问题,只需删除宏定义中的分号即可。
所以我让单例模式按照我想要的方式工作,我认为主要问题是指针和引用。 (“...”代表不相关的代码)。
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();
显然不是你想要的。要解决此问题,只需删除宏定义中的分号即可。