-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcallback_iterator.hpp
More file actions
43 lines (39 loc) · 1.41 KB
/
callback_iterator.hpp
File metadata and controls
43 lines (39 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef COM_MASAERS_CALLBACK_ITERATOR_HPP
#define COM_MASAERS_CALLBACK_ITERATOR_HPP
#include <iterator>
#include <utility>
namespace com_masaers {
template<typename Func>
class callback_iterator_t : public std::iterator<std::output_iterator_tag, void, void, void, void> {
public:
template<typename... Args> callback_iterator_t(Args&&... args)
: func_m(std::forward<Args>(args)...)
{}
callback_iterator_t(const callback_iterator_t&) = default;
callback_iterator_t(callback_iterator_t&&) = default;
callback_iterator_t& operator=(callback_iterator_t x) {
swap(*this, x);
return *this;
}
template<typename Arg>
const callback_iterator_t& operator=(Arg&& arg) const {
func_m(std::forward<Arg>(arg));
return *this;
}
friend void swap(callback_iterator_t& a, callback_iterator_t& b) {
using std::swap;
swap(a.func_m, b.func_m);
}
const callback_iterator_t& operator++() const { return *this; }
const callback_iterator_t& operator++(int) const { return *this; }
const callback_iterator_t& operator*() const { return *this; }
protected:
Func func_m;
}; // callback_iterator_t
template<typename Func>
callback_iterator_t<Func> callback_iterator(Func&& func) {
return callback_iterator_t<Func>(std::forward<Func>(func));
}
} // com_masaers
/******************************************************************************/
#endif