【发布时间】:2011-07-06 14:54:33
【问题描述】:
假设我有一个想要通过 API 公开的 [acme] 对象流。我有两个选择,回调和迭代器。
API #1:回调
// API #1
// This function takes a user-defined callback
// and invokes it for each object in the stream.
template<typename CallbackFunctor>
void ProcessAcmeStream(CallbackFunctor &callback);
API #2:迭代器
// API #2
// Provides the iterator class AcmeStreamIterator.
AcmeStreamIterator my_stream_begin = AcmeStreamIterator::begin();
AcmeStreamIterator my_stream_end = AcmeStreamIterator::end();
API #1 从用户手中获取程序的控制流,并且在整个流被消耗之前不会返回(暂时忘记异常)。
API #2 将控制流保留在用户手中,允许用户自行向前移动流。
API #1 感觉更更高级别,允许用户立即跳转到业务逻辑(回调函子)。另一方面,API #2 感觉更灵活,允许用户进行较低级别的控制。
从设计的角度来看,我应该选择哪一个?还有更多我还没有看到的优点和缺点吗?未来有哪些支持/维护问题?
【问题讨论】:
标签: c++ design-patterns callback iterator inversion-of-control