C++ 创建要运行的别名

C++ 创建要运行的别名,c++,alias,C++,Alias,我愿意创建一个别名,如下所示: using window = Window::instance().getWindow(); Window::instance().getWindow()返回指向sf::RenderWindowtype对象的指针,我想缩短铭文以使其更方便使用 别名调用将是smth,如下所示: 窗口->绘制(对象) 而不是: Window::instance().getWindow()->绘制(对象) 是否有可能在C++中?< p>如果你绝对确信返回的指针在调用之间没有变化,你可

我愿意创建一个别名,如下所示:

using window = Window::instance().getWindow();
Window::instance().getWindow()
返回指向
sf::RenderWindow
type对象的指针,我想缩短铭文以使其更方便使用

别名调用将是smth,如下所示:
窗口->绘制(对象)
而不是:
Window::instance().getWindow()->绘制(对象)


是否有可能在C++中?

< p>如果你绝对确信返回的指针在调用之间没有变化,你可以暂时保存它:

auto window = Window::instance().getWindow();
另一个不好❌方法是使用宏:

#define window (Window::instance().getWindow())

但请记住在括号中加上括号,以防运算符优先级出错。

如果您完全确定返回的指针在调用之间不会更改,则可以暂时保存它:

auto window = Window::instance().getWindow();
另一个不好❌方法是使用宏:

#define window (Window::instance().getWindow())

但请记住,如果运算符优先级出错,请将其括起来。

您可以使用
自动
: 所以不是

Window::instance().getWindow()->draw(object);
你将有:

auto* window = Window::instance().getWindow();
window->draw(object);

您可以使用
auto
: 所以不是

Window::instance().getWindow()->draw(object);
你将有:

auto* window = Window::instance().getWindow();
window->draw(object);

使用
仅适用于类型和名称空间。您需要的是一个简单的指针变量:

sf::RenderWindow *window = Window::instance().getWindow();
在C++11和更高版本中,可以使用
auto
来缩短:

auto *window = Window::instance().getWindow();

使用
仅适用于类型和名称空间。您需要的是一个简单的指针变量:

sf::RenderWindow *window = Window::instance().getWindow();
在C++11和更高版本中,可以使用
auto
来缩短:

auto *window = Window::instance().getWindow();


为什么不使用
auto
?是
Window::instance().getWindow()
持久化的结果吗?还是会随着电话的变化而变化?在不知道的情况下无法回答您的问题。为什么不使用
auto
?是
Window::instance().getWindow()
的结果吗?还是会随着电话的变化而变化?在不知道的情况下无法回答您的问题。建议不要列出错误的方法,但如果必须,请用骷髅和交叉骨标记它,并将其放在最后。为什么使用#define some bad?@Chris.Frog的方法会导致此代码
something.window.blah
混乱。明白,所以基本上在使用:auto window=window::instance().getWindow()时;在main()之前,window只是一个sf::RenderWindow*类型的全局变量?@Chris.Frog:是的。建议不要列出错误的方法,但如果必须的话,用骷髅和交叉骨标记它,并将其放在最后。为什么使用#define这么糟糕?@Chris.Frog例如,这个代码
something.window.blah
会弄乱。明白,所以基本上使用时:auto window=window::instance().getWindow();在main()之前,window只是一个sf::RenderWindow*类型的全局变量?@Chris.Frog:Yes.auto完成了它的工作,但我注意到它也可以在auto关键字后面没有*的情况下工作。为什么它是双向的,并且会把事情搞砸?@Chris.Frog:
getWindow()
有一个固定的返回类型(
sf::RenderWindow*
)。如果使用
自动窗口
自动
将解析为完全相同的类型(
sf::RenderWindow*
)。如果使用
auto*window
,编译器知道
getWindow()
返回指针,因此
auto
将解析为指向的类型(
sf::RenderWindow
)。无论哪种方式,最终都会得到一个
sf::RenderWindow*
指针。我会说,放置
*
的主要原因是确认您有一个指针。因此,在适当的时候使用
*
&
可能有助于确保即使您决定重构某些代码以使用引用而不是指针,也不会产生意外的副本,反之亦然。auto完成了它的工作,但我注意到,它也可以在auto关键字后面没有*的情况下工作。为什么它是双向的,并且会把事情搞砸?@Chris.Frog:
getWindow()
有一个固定的返回类型(
sf::RenderWindow*
)。如果使用
自动窗口
自动
将解析为完全相同的类型(
sf::RenderWindow*
)。如果使用
auto*window
,编译器知道
getWindow()
返回指针,因此
auto
将解析为指向的类型(
sf::RenderWindow
)。无论哪种方式,最终都会得到一个
sf::RenderWindow*
指针。我会说,放置
*
的主要原因是确认您有一个指针。因此,在适当的时候使用
*
&
可能有助于确保即使您决定重构某些代码以使用引用而不是指针,也不会产生意外的副本,反之亦然。