Chi*_*iel 2 c++ class initialization-list
我有一个与3d网格一起使用的程序.这个网格有自己的类对象Grid,看起来像这样(简化版):
class Grid
{
public:
Grid() { readDataFromInputFile(); }
private:
void readDataFromInputFile() {...} // this function reads the values for i, j, k from disk
int i; int j; int k;
};
Run Code Online (Sandbox Code Playgroud)
我现在想做的是能够将变量i,j和k设置为const int,以避免在其他函数中意外地搞乱它们.但是我不能在成员初始化列表中轻松设置它们,因为它们必须从文件中读取.我一直在浏览现有的讨论,但我找不到关于这个问题的准确讨论.
有没有一个解决方案能够将它们设置为const,并且仍然能够使用复杂的函数来检索数据?在我的实际应用程序中,当然还有更多要读取的变量,初始化后不允许更改.
不要违反一个责任原则:A Grid不应该负责从文件加载自己,这是另一个组件的责任(例如一个简单的加载函数):
class Grid
{
public:
Grid( int ii , int jj , int kk ) : i{ ii } , j{ jj } , k{ kk }
private:
const int i , j , k;
};
Grid loadGrid( constd std::string& filename )
{
...
};
Run Code Online (Sandbox Code Playgroud)