fork download
  1. #include <iterator> // for std::begin/std::end
  2. #include <utility> // for std::declval
  3.  
  4. template<class Iter>
  5. class java_iter_wrapper
  6. {
  7. public:
  8. typedef typename std::iterator_traits<Iter>::value_type value_type;
  9. typedef typename std::iterator_traits<Iter>::reference reference;
  10.  
  11. java_iter_wrapper(Iter b, Iter e)
  12. : beg_(b), end_(e)
  13. {}
  14.  
  15. bool hasNext() const {return beg_!=end_;}
  16.  
  17. reference next() {return *beg_++;}
  18.  
  19. private:
  20. Iter beg_, end_;
  21. };
  22.  
  23. namespace jih { // java iterator helper
  24. using std::begin;
  25. using std::end;
  26.  
  27. template<class Container>
  28. using CppIterOf = decltype(begin(std::declval<Container&>()));
  29. }
  30.  
  31. template<class Container>
  32. java_iter_wrapper<jih::CppIterOf<Container>> get_java_iter(Container& c)
  33. {
  34. using std::begin;
  35. using std::end;
  36. return java_iter_wrapper<jih::CppIterOf<Container>>(begin(c),end(c));
  37. }
  38.  
  39. // ---- Anwendungsbeispiel ----
  40.  
  41. #include <iostream>
  42. #include <vector>
  43.  
  44. int main()
  45. {
  46. using namespace std;
  47. vector<int> foo = {2,3,5,7};
  48. auto jit = get_java_iter(foo);
  49. while (jit.hasNext()) {
  50. int z = jit.next();
  51. cout << z << endl;
  52. }
  53. }
  54.  
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
2
3
5
7