C++标准规定单个访问部分中的成员变量必须按照它们声明的顺序在内存中进行布局.同时,编译器可以自由选择访问部分本身的相互排序.这种自由使理论上不可能链接由不同编译器创建的二进制文件.那么严格的剖面订购的剩余原因是什么?并执行即将到来的C++ 09新的C++ 11个标准提供了一种完全确定对象布局"手"?
我有一个非常普遍的设计问题,但我会用一个例子具体地描述它。
假设您正在为数字打印机开发嵌入式软件。机器有 4 个打印头(用于 C、M、Y、K 颜色中的每一种)。每个打印头执行相同的任务:取墨粉并将其放在页面上。
在运行时,我们可以用两种不同的方式组织 API。我们要么遵循逻辑(又名“功能”或“过程”)设计,以便客户端软件可以控制所有打印头的打印过程(例如,一次更改所有颜色的亮度)。或者我们遵循物理设计,以便客户端软件可以单独控制每个打印头(例如,仅更改洋红色的亮度)。
这是软件设计中的一个经典困境:我们要么按活动组织,要么按体系结构组织。按功能或按形式。我的问题是:是否有任何可靠的标准来选择一个?不同的项目会有不同的选择,都可以根据自己的情况选择合适的;所以我不问哪个最好,只问如何选择。例如,我会对您关于松散耦合、可维护性、分层、面向角色的设计、架构设计模式等的想法感兴趣。