c++ - 全局内联函数

标签 c++

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

相关文章:

c++ - Release模式和 Debug模式之间的编译时间差异

c++ - 排序时堆栈溢出(合并排序和快速排序)

c++ - 3个错误: error: 'Entry' was not declared in this scope. error: template argument 1 is invalid. error: invalid type in declaration before '(' token

c++ - C++中访问坐标的数组

c++ - 如何在共享库中获取正确的函数名称?

C++ 后端基础设施

c++ - 什么是 uint_fast32_t,为什么要使用它来代替常规的 int 和 uint32_t?

c++ - 无法退出递归

使用 setw 和 setfill 的 C++ 输出格式化

C++如何正确复制指针的容器( vector )?