与这个问题类似,但是我觉得它不是一个重复的不同之处:
C++ Calling a function before base-class initialization in the initialization list
我有这个构造函数:
EditorGrid::EditorGrid(int width, int height) :
Grid(width , //workingWidth
height , //workingHeight
(SettingsApp::getInstance(0)->iconSize + SettingsApp::getInstance(0)->iconSpace ) , //pitchWidth
(SettingsApp::getInstance(0)->iconSize + SettingsApp::getInstance(0)->iconSpace + SettingsApp::getInstance(0)->iconLabel) //pitchHeight
)
{
//EditorGrid-specific setup
}
它有效,但是当我知道它每次都会返回相同的东西时,我会多次调用SettingsApp::getInstance(0)
看起来很难看。我可以调用一次,只是在这种情况下重用该值吗?
(在这种情况下,指向SettingsApp
对象的指针)
(之所以这样结构是因为Grid
的不同孩子对pitchWidth
和pitchHeight
有不同的等式,我想保持隐含地使用相同对象的单身人士的想法到处都没有实际传递它。)
答案 0 :(得分:6)
创建一个(可能是私有的)ctor,将你想要计算的值作为参数一次并委托给它:
EditorGrid::EditorGrid(int width, int height, /*your_type*/& instance_0) :
Grid(width, height,
instance_0.iconSize + instance_0.iconSpace,
instance_0.iconSize + instance_0.iconSpace + instance_0.iconLabel
{
//EditorGrid-specific setup
}
EditorGrid::EditorGrid(int width, int height) :
EditorGrid(width, height, *SettingsApp::getInstance(0))
{
}