【发布时间】:2016-05-15 12:52:32
【问题描述】:
我将描述问题。我有一个带有 API 的类,它调用大量的类成员函数层次结构来执行一些逻辑。现在,我更新了逻辑,因此层次结构中的每个函数都需要一个额外的参数(API 没有改变)。
一个想法 - 我可以在类中添加一个“scrathpad”成员,而不是为每个方法添加一个额外的参数,即一个仅用于临时计算的变量,并且仅在时间范围内“有效” API 调用,调用完成后就是“垃圾”。
例子:
void A::api()
{
scratch_pad = get_some_value_once();
foo1();
}
void A::foo1() { ...; foo2(); }
void A::foo2() { ...; foo3(); }
...
void A::fooN() /* Called 100000000 times */
{
...;
// Do something with scratch_pad.
// I would realy like to avoid adding 'scratch_pad' parameter to all the foos().
}
这是一种有效的方法吗?
如果我的 API 声明为 const,它仍然有效吗?
【问题讨论】:
-
WTH 是 "scratchpad" 变量吗?你能用一些(伪)代码示例来说明这一点吗?
-
如果不改变物体的可观察状态,我觉得没问题。
-
“现在,我更新了逻辑,因此层次结构中的每个函数都需要一个额外的参数(API 没有改变)。” 听起来应该使用继承来替换一个接口定义,但实际上不可能从你不清楚的上下文中分辨出来。
-
请注意,如果你这样做,它会让你的类不是线程安全的,并且添加同步会使其变慢。
-
为什么不总是调用
get_some_value_once并在 that 函数中隐藏记忆逻辑?
标签: c++ oop abstraction