我正在用 C++ 设计一个从 HTML 页面中提取 URL 的类。我正在使用 Boost 的 Regex 库为我完成繁重的工作。我开始设计一个类,并意识到我不想束缚 URL 的存储方式。std::vector<Url>
一种选择是通过引用接受 a并在其上调用 push_back 。我想避免强迫我班的消费者使用std::vector
. 因此,我创建了一个带有目标迭代器的成员模板。它看起来像这样:
template <typename TForwardIterator, typename TOutputIterator>
TOutputIterator UrlExtractor::get_urls(
TForwardIterator begin,
TForwardIterator end,
TOutputIterator dest);
我觉得我把事情复杂化了。我喜欢用 C++ 编写相当通用的代码,但我很难锁定我的接口。但后来我陷入了我试图将所有内容模板化的困境。此时,阅读代码的人并没有意识到这TForwardIterator
是在迭代std::string
.
在我的特殊情况下,我想知道这种通用是否是一件好事。你什么时候开始让代码更明确?是否有一种标准方法可以从函数中获取值?