提问人:Jnx 提问时间:9/6/2023 最后编辑:Jean-Baptiste YunèsJnx 更新时间:9/6/2023 访问量:61
如何以正确的方式做到这一点?在函数中声明静态对象
How to do this the right way? Declaring static object in function
问:
我这样做的方式有效,但感觉像是令人难以置信的糟糕编程。
void draw_display()
{
static DISPLAY mydisplay = DISPLAY(parameters);
mydisplay.set_orientation(0);
do something with mydisplay...
}
因此,该函数由微控制器的中断调用。
在我的理想世界中,我会在某个地方声明对象是全局的,设置方向,然后在函数中使用全局对象。draw_display
mydisplay
正确的 c++ 方法是什么?
这更像是一个“以正确的方式做事”并从中学习的问题。
答:
-1赞
SOUMYA SAMANTA
9/6/2023
#1
确保 DISPLAY 类具有具有所需参数的正确构造函数。如有必要,您还应该确保它有一个析构函数。
在 draw_display 函数外部初始化 mydisplay。这样可以确保不会在每次调用函数时都创建新的 DISPLAY 对象。最初可以使用构造函数或初始化函数来设置对象。
class DISPLAY {
public:
DISPLAY(parameters) {
// Constructor implementation with parameters
}
~DISPLAY() {
// Destructor implementation if necessary
}
void set_orientation(int orientation) {
// Implementation of set_orientation
}
// Other member functions and data members
};
// Initialize mydisplay outside of draw_display
static DISPLAY mydisplay(parameters);
void draw_display() {
mydisplay.set_orientation(0);
// Do something with mydisplay...
}
评论
1赞
Jean-Baptiste Yunès
9/6/2023
OP 希望在“开始”时调用。至少把它放在 ctor 中。set_orientation
1赞
HolyBlackCat
9/6/2023
#2
我的目标是只给set_orientation打一次电话。
然后,您可以使用立即调用的 lambda:
static DISPLAY mydisplay = []{
{
DISPLAY ret(parameters);
ret.set_orientation(0);
return ret;
}();
评论
0赞
Jnx
9/8/2023
这似乎是全局对象的一个很好的替代方案。谢谢!
评论
set_orientation