【发布时间】:2013-12-22 08:42:05
【问题描述】:
有时我会遇到需要多次执行一组代码但稍作修改的情况。考虑以下两种情况:
Case 1:
A
B
C
Case 2:
A
D
C
//A, B, C, D are used to represent a set of code lines
现在B 和D 中的代码行之间没有相似之处,因此我目前在我的应用程序中创建了 2 个不同的函数。
但是B 或D 中的代码大小与A 或C 相比非常小。
我不能只为A 和C 创建单独的函数,因为它们使用一些公共变量,并且将这些变量作为参数传递会非常混乱。
所以看起来我的问题只有一个解决方案。
将这两种情况组合成一个函数,并通过将bool 作为参数传递给该函数来在其中一种情况之间进行选择。然而,这导致要维护的功能非常大。
所以我正在寻找一些更好的选择,因为我相信很多人一定遇到过这种情况。
编辑:
为了简单起见,考虑一个字符串变量myString。
A intialises it with some value.
B/D modify it according to some conditions.
C uses myString for some purpose, say write to file.
总而言之,数据流是这样的:
Case 1:
A -> B -> C
Case 2:
A -> D -> C
只是有大量数据流将这些集合中的每一个分成不同的功能。
【问题讨论】:
-
是否可以定义一个适用于 B 和 D 的抽象函数签名?然后你可以传递一个函数指针来执行中间部分。
-
“我不能只为 A & C 创建单独的函数,因为它们使用一些公共变量,并且将这些变量作为参数传递会非常混乱。” - 对不起,这就是重构的工作方式。有时很难。而且你无法真正避免它。
-
@H2CO3 - OP 表示 A 和 C 共享公共变量;我问的是 B 和 D。也许 OP 意味着 A 和 C 与 B 和 D 共享太多,但这不是所说的。
-
@TedHopp 您能否通过代码说明“定义一个适用于 B 和 D 的单一抽象函数签名”是什么意思?
-
@TedHopp 是 A 和 C 与 B/D 共享变量。这就是为什么 B/D 介于 A 和 C 之间的原因。
标签: c++ algorithm optimization