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*
指针。我会说,放置*
的主要原因是确认您有一个指针。因此,在适当的时候使用*
或&
可能有助于确保即使您决定重构某些代码以使用引用而不是指针,也不会产生意外的副本,反之亦然。