我这里有一个单例类,叫做Master
。这个类有一些其他的实体来做特定的工作。 Master
类有一个用于这些实体的 get
方法。
namespace Framework {
class Master {
private:
NetworkController * mNetworkController;
FileController * mFileController;
static Master * gInstance;
public:
static Master * getInstance();
NetworkController * getNetworkController();
FileController * getFileController();
}
}
我在整个程序中都像这样使用这些实体:
Framework::Master::getInstance() -> getNetworkController()
Framework::Master::getInstance() -> getFileController()
如您所见,输入起来有点长且费时。所以我尝试将它们放在一个宏中,如下所示:
#define NETWORK_CONTROLLER() Framework::Master::getInstance() -> getNetworkController()
#define FILE_CONTROLLER() Framework::Master::getInstance() -> getFileController()
namespace Framework {
class Master {
...
}
}
但是,我发现这种方法很困惑且令人困惑。所以我尝试了 inline
方法并将它们添加到一个头文件中。
#ifndef __FrameworkHelper__
#define __FrameworkHelper__
inline Framework::NetworkController * MasterNetworkController() { return Framework::Master::getInstance() -> getNetworkController(); }
inline Framework::FileController * MasterFileController() { return Framework::Master::getInstance() -> getFileController(); }
#endif
但是当我试图在不同的类上使用它们时它给了我编译错误说:
error C2653: 'Framework' : is not a class or namespace name
不知道为什么会报这样的错误。如何使这些内联方法在我的整个程序中可用?
最佳答案
您的头文件中没有引用命名空间框架
,您可以通过以下方式修复它:
#ifndef __FrameworkHelper__
#define __FrameworkHelper__
#include "Framework.h" // where the framework is defined
inline Framework::NetworkController * MasterNetworkController() { return Framework::Master::getInstance() -> getNetworkController(); }
inline Framework::FileController * MasterFileController() { return Framework::Master::getInstance() -> getFileController(); }
#endif
或者在你的框架头文件中:
#ifndef __Framework__
#define __Framework__
namespace Framework {
class Master {
...
}
}
inline Framework::NetworkController * MasterNetworkController() { return Framework::Master::getInstance() -> getNetworkController(); }
inline Framework::FileController * MasterFileController() { return Framework::Master::getInstance() -> getFileController(); }
#endif
但我更喜欢第一种解决方案....
另一种解决方案是设置 getNetworkController
和 getFileController
static
和像这样使用它们:
Master::getNetworkController();
Master::getFileController();
我个人认为这样会更容易理解。
关于c++ - 全局内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17651474/