直接访问C ++中的嵌套类和结构

时间:2014-08-25 18:03:53

标签: c++ design-patterns

在我的代码中,以下模式是经常性的:

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类污染我的命名空间。

1 个答案:

答案 0 :(得分:0)

这个问题没有干净的通用解决方案;你必须决定如何以一种在项目环境中有意义的方式封装事物。

如果mesh用于构建Assembler以外的其他内容,则它应该是Assembler的成员。如果构造Assembler需要这么多参数以使构造函数不可读,那么构造AssemblerParam同样困难,因此AssemblerParam无法解决该问题。参数集可能有子集,可以在没有复杂方法的情况下捆绑到简单容器中,但这取决于您的具体情况。