不使用定义的较短的呼叫/名称

Sam*_*rsa 3 c++ visual-studio-2008

简单的问题,如何在不使用定义的情况下缩短调用/名称.

例如,我有一个我必须在命名空间内调用的单例(我不能使用命名空间blabla,因为它是不允许的),如下所示:

MyFW::GameRoot::Instance()->DoSomething();
Run Code Online (Sandbox Code Playgroud)

现在我可以将它分配给一个变量,如果我在同一个类/函数中多次使用它,它会有所作为,但在许多类/函数中使用它会变得很麻烦.我决定使用#define:

#define MyFW::GameRoot::Instance() ROOT //defined in GameRoot.h

ROOT->DoSomething(); //Used where-ever GameRoot.h is included
Run Code Online (Sandbox Code Playgroud)

更好,我真的很喜欢它,特别是因为现在无论我在哪里看到ROOT(通过V-Assist进行颜色编码)我都知道它是什么...除非我在那里有一个断点,我需要Visual Studio解决ROOT显示在观察窗口(甚至将鼠标悬停在它上面,以便在调试中快速拉出对象),这是它无法做到的.

还有其他选择吗?你们做些什么来缩短名字?只需使用本地/成员指针来存储实例?

谢谢!

aki*_*ira 5

使用本地参考:

MyFW::GameRoot& ROOT = *MyFW::GameRoot::Instance();
Run Code Online (Sandbox Code Playgroud)

不要使用定义.

  • 我正在看的汇编程序代码告诉我. (2认同)

cap*_*232 5

你不能使用命名空间...,但你能使用吗?

namespace root=MyFW::GameRoot;
Run Code Online (Sandbox Code Playgroud)

然后你可以输入

root::Instance()->DoSomething();
Run Code Online (Sandbox Code Playgroud)

定义这样的命名空间比#define更好.(即它不会被误导到其他地方.编译器知道你要做什么.)