c++ - 控制反转的利弊

标签 c++ design-patterns callback iterator inversion-of-control

假设我有一个想要通过 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/

相关文章:

c++ - "NULL pointer is passed"用于检测轮廓

c++ - 如何测试共享对象是32位还是64位?

java - 用多态替换条件

java - 计算机和人类玩家简单游戏中玩家模型的设计

javascript - 编写这样的代码来处理错误并在读取文件时解析 JSON 数据是否安全

c++ - 如何声明成员的访问者?

c++ - 通过引用传递变量并构造新对象

ios - 如何在iOS中使用委托(delegate)来模拟外部框架的类?

javascript - 点击事件回调

javascript - 如何在完成之前获取异步函数的状态?