我有:
void add_all_msgs(std::deque<Message>::iterator &iter);我怎样才能使这个函数“泛型”,这样它就可以接受任何类型的输入器?我真的不关心它是在迭代一个双队列、一个向量还是其他什么东西,只要迭代器在迭代消息的消息。-这在c++中是完全可能的吗?
发布于 2009-07-09 13:56:24
template<class InputIterator>
void add_all_msgs(InputIterator iter);用法:
std::deque<Message> deq;
add_all_msgs(deq.begin());发布于 2009-07-09 14:05:50
template <typename Iterator>
void add_all_messages(Iterator first, Iterator last)用法:
vector<message> v;
add_all_messages(v.begin(), v.end());您需要指定结束,否则您将不知道何时停止!它还为您提供了仅添加容器的子范围的灵活性。
发布于 2009-07-09 14:06:28
如果希望编译器检查迭代器是否确实引用了Message对象,可以使用如下技术。
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);
}https://stackoverflow.com/questions/1104035
复制相似问题