假设我有一个流式的[acme]对象,我想通过API公开它。 我有两个选择,回调和迭代器。
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则更加灵活,允许用户更低层次的控制。
从设计角度来看,我应该选择哪一个?还有没有我尚未发现的利弊?未来有哪些支持/维护问题?
std::string
中都知道的那样),提供多种完成同一件事情的方式的API只会让人感到困惑。我建议选择一种方式。 - sbi