C++ DLL 依赖项 State-pattern
C++ DLL dependancies State-pattern
为了我的作业,我制作了一个 class 机器人,它有一个指向 class 状态的指针。这个状态class是一个接口。 State child classes 的实际实现需要在单独的 DLL 中完成。
我已经能够在单独的 DLL 中成功地制作这些 classes,因此只有带有 State 的 child classes (StateDLL
) 的 DLL引用包含 State 接口的 DLL class.
问题始于机器人的构造函数class。例如,我必须让 Robot 的私有变量 State*
知道他的第一个 childclass 是什么(其中 S 的类型为 State*
)
Robot::Robot() {
S = StateDLL::StateChild1::get();
}
这是否意味着 Robot 需要知道 StateDLL 的内容?有没有办法以任何其他方式告诉他有关 childclass 的信息,或者如果我让 RobotDLL 引用 StateDLL 并不重要(考虑到 StateDLL 可以更改很多,而 RobotDLL 应该更静态)?
你的机器人 class 根本不应该知道 StateDLL,最好它应该得到一个通过构造函数传入的 State*
的实例。这将使依赖性保持在最低限度,并允许可交换的实现和简单的测试。
为了防止 RobotDLL 从 StateDLL 获得任何依赖关系,一个由工厂函数组成的接口仅提供 State*
就足以允许 StateDLL 与另一个提供相同功能的 DLL 互换工厂函数,或者如果您稍后决定合并两个 dll,则可以在 RobotDLL 中定义相同的函数。
为了我的作业,我制作了一个 class 机器人,它有一个指向 class 状态的指针。这个状态class是一个接口。 State child classes 的实际实现需要在单独的 DLL 中完成。
我已经能够在单独的 DLL 中成功地制作这些 classes,因此只有带有 State 的 child classes (StateDLL
) 的 DLL引用包含 State 接口的 DLL class.
问题始于机器人的构造函数class。例如,我必须让 Robot 的私有变量 State*
知道他的第一个 childclass 是什么(其中 S 的类型为 State*
)
Robot::Robot() {
S = StateDLL::StateChild1::get();
}
这是否意味着 Robot 需要知道 StateDLL 的内容?有没有办法以任何其他方式告诉他有关 childclass 的信息,或者如果我让 RobotDLL 引用 StateDLL 并不重要(考虑到 StateDLL 可以更改很多,而 RobotDLL 应该更静态)?
你的机器人 class 根本不应该知道 StateDLL,最好它应该得到一个通过构造函数传入的 State*
的实例。这将使依赖性保持在最低限度,并允许可交换的实现和简单的测试。
为了防止 RobotDLL 从 StateDLL 获得任何依赖关系,一个由工厂函数组成的接口仅提供 State*
就足以允许 StateDLL 与另一个提供相同功能的 DLL 互换工厂函数,或者如果您稍后决定合并两个 dll,则可以在 RobotDLL 中定义相同的函数。