有没有办法在 C++ 中缩写表达式?例如,如果我有这样的事情
ui.myplot->graph(0)
我想把它缩写为mygraph
, 这样就不会像这样
int a = ui.myplot->graph(0)->val;
我可以这样做
int a = mygraph->val;
我知道 typedef 不会在这里工作。有什么建议么 ?
有没有办法在 C++ 中缩写表达式?例如,如果我有这样的事情
ui.myplot->graph(0)
我想把它缩写为mygraph
, 这样就不会像这样
int a = ui.myplot->graph(0)->val;
我可以这样做
int a = mygraph->val;
我知道 typedef 不会在这里工作。有什么建议么 ?
使用参考:
const auto& mygraph = ui.myplot->graph(0);
或者如果您需要更改值,则使用可变引用:
auto& mygraph = ui.myplot->graph(0);
引用被设计为用作别名;这在参数传递中最常出现的事实有点误导。它们也可以在本地用于为复杂表达式的结果设置别名,例如对象的深度嵌套字段。
我假设您将 Qt 与 Designer 和 UI 文件一起使用,因为您显示的代码使用 Qt 范例。
在您的班级中放置一个Graph* mygraph
成员,并将其设置为指向您的图表(0):
MyClass {
Q_OBJECT
public:
Graph* mygraph;
MyClass();
}
在构造函数中,在ui->setupUI(this)
:
MyClass::MyClass()
{
ui->setupUi(this);
mygraph = ui.myplot->graph(0);
}
现在你可以在你的类方法中使用它了。
int MyClass::getValue()
{
int a = mygraph->val();
return a;
}
毫不犹豫地定义局部变量。它们对于提高可读性非常方便,如果不使用 -O0 编译,它们将被编译器(引用或实际变量)优化掉(在最后一种情况下,我不确定优化行为)
int a = ui.myplot->graph(0)->val;
变成
auto& myParticularGraph = ui.myplot->graph(0);
int a = myParticularGraph->val;
现在myParticularGraph
就像一个“别名”ui.myplot->graph(0)