gpt4 book ai didi

C++ 单例 #define

转载 作者:行者123 更新时间:2023-11-27 22:53:22 25 4
gpt4 key购买 nike

我有一个关于使用 C++ 的单例模式的小问题。假设我有以下类(class):

namespace MyNameSpace 
{
class Window_Singleton
{
private:
static Window_Singleton instance;
Window_Singleton();
/* Some more private stuff here */

public:
static Window_Singleton *GetInstance();
~Window_Singleton();
/* Some more public stuff here */

}
}

#define Window Window_Singleton.GetInstance()

我有这个 #define 这样我就不必总是写 MyNameSpace::Window_Singleton.GetInstance().SomeMethod(),我现在可以使用更短的 MyNameSpace::Window.SomeMethod()

但问题是:现在我不能在另一个命名空间中创建一个 Window 类,因为我会遇到定义问题。

有没有办法在不“破坏”我的命名空间的情况下提供#define。某种“本地命名空间”定义?

最佳答案

由于宏是在编译之前展开的方式,预编译器不知道类、命名空间等内容。所以不,如果你定义一个宏 Window 它将在任何地方使用。

你可以做的是定义一个函数:

inline Window_Singleton& Window(){
return Window_Singleton.GetInstance();
}

然后写

Window().SomeMethod();

它基本上是一对额外的大括号,但它会让您的代码更加清晰。

关于C++ 单例 #define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35378897/

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