在我的代码中,以下模式是经常性的:
class Assembler {/*...*/}; //does something, in this case assembles a matrix
class AssemblerParam {/*...*/}; //contains the parameters needed to create
//an object of the Assembler class
class AssemblerReader {/*...*/}; //reads a file and creates an
//object of AssemblerParam
我已经意识到,通过在Assembler中嵌套AssemblerParam和AssemblerReader(以及通用编程的一些优点),可以更好地组织它。
class Assembler {
public:
class Param { /*...*/ };
class Reader{ /*...*/ };
private:
Param parameters;
};
但是,现在对于像这样的事情,汇编程序的实现方法的可读性要低得多。
void Assembler::method() {
parameters.mesh.method(parameters.member.method());
//the code now is cluttered with the word "parameters"
}
相反,我希望我的代码可以阅读:
void Assembler::method() {
mesh.method(member.method()); //a lot more readable
}
任何解决方案?
备注1 使用像这样的继承
class AssemblerParam{/*...*/};
class Assembler : public AssemblerParam { /*...*/ };
有助于提高可读性,但会使用SomethingParam类污染我的命名空间。
答案 0 :(得分:0)
这个问题没有干净的通用解决方案;你必须决定如何以一种在项目环境中有意义的方式封装事物。
如果mesh
用于构建Assembler
以外的其他内容,则它应该是Assembler
的成员。如果构造Assembler
需要这么多参数以使构造函数不可读,那么构造AssemblerParam
同样困难,因此AssemblerParam
无法解决该问题。参数集可能有子集,可以在没有复杂方法的情况下捆绑到简单容器中,但这取决于您的具体情况。