gpt4 book ai didi

c++ - 全局内联函数

转载 作者:行者123 更新时间:2023-11-28 00:43:22 24 4
gpt4 key购买 nike

我这里有一个单例类,叫做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

但我更喜欢第一种解决方案....

另一种解决方案是设置 getNetworkControllergetFileController static 和像这样使用它们:

Master::getNetworkController();
Master::getFileController();

我个人认为这样会更容易理解。

关于c++ - 全局内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17651474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com