首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++中的“通用”迭代器

c++中的“通用”迭代器
EN

Stack Overflow用户
提问于 2009-07-09 13:53:19
回答 7查看 6.4K关注 0票数 13

我有:

代码语言:javascript
复制
void add_all_msgs(std::deque<Message>::iterator &iter);

我怎样才能使这个函数“泛型”,这样它就可以接受任何类型的输入器?我真的不关心它是在迭代一个双队列、一个向量还是其他什么东西,只要迭代器在迭代消息的消息。-这在c++中是完全可能的吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-07-09 13:56:24

代码语言:javascript
复制
template<class InputIterator>
void add_all_msgs(InputIterator iter);

用法:

代码语言:javascript
复制
std::deque<Message> deq;
add_all_msgs(deq.begin());
票数 8
EN

Stack Overflow用户

发布于 2009-07-09 14:05:50

代码语言:javascript
复制
template <typename Iterator>
void add_all_messages(Iterator first, Iterator last)

用法:

代码语言:javascript
复制
vector<message> v;
add_all_messages(v.begin(), v.end());

您需要指定结束,否则您将不知道何时停止!它还为您提供了仅添加容器的子范围的灵活性。

票数 13
EN

Stack Overflow用户

发布于 2009-07-09 14:06:28

如果希望编译器检查迭代器是否确实引用了Message对象,可以使用如下技术。

代码语言:javascript
复制
template <typename InputIterator, typename ValueType>
struct AddAllMessages { };

template <typename InputIterator>
struct AddAllMessages<InputIterator, Message> {
  static void execute(const InputIterator &it) {
    // ...
  }
};

template <typename InputIterator>
void add_all_msgs(const InputIterator &it) {
  AddAllMessages<InputIterator, 
                 typename std::iterator_traits<InputIterator>::value_type>::execute(it);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1104035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档