假设我有一个想要通过 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 感觉更灵活,允许用户进行较低级别的控制。
从设计的角度来看,我应该选择哪一个?还有更多我还没有看到的优点和缺点吗? future 有哪些支持/维护问题?
最佳答案
迭代器方法更灵活,回调版本可以通过现有算法轻松实现第一个:
std::for_each( MyStream::begin(), MyStream::end(), callback );
关于c++ - 控制反转的利弊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5156797/