有没有办法在C ++中缩写表达式?例如,如果我有这样的东西
ui.myplot->graph(0)
我希望将其缩写为mygraph
,这样就不会像这样了
int a = ui.myplot->graph(0)->val;
我能做到这一点
int a = mygraph->val;
我知道typedef不会在这里工作。有什么建议吗?
答案 0 :(得分:2)
使用参考:
const auto& mygraph = ui.myplot->graph(0);
如果您需要更改值,则为可变参考:
auto& mygraph = ui.myplot->graph(0);
引用旨在用作别名;事实上,这通常出现在参数传递中,这有点误导。它们也可以在本地用于复制复杂表达式的结果,例如对象的深层嵌套字段。
答案 1 :(得分:1)
我假设您正在将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;
}
答案 2 :(得分:0)
不要犹豫,定义局部变量。它们非常便于提高可读性,如果没有用-O0编译,它们将被编译器(参考或实际变量)优化掉(在最后一种情况下,我不确定优化行为)
int a = ui.myplot->graph(0)->val;
变为
auto& myParticularGraph = ui.myplot->graph(0);
int a = myParticularGraph->val;
现在myParticularGraph
就像是ui.myplot->graph(0)