OpenHantek
enumclass.h
1 // SPDX-License-Identifier: GPL-2.0+
2 
3 #pragma once
4 
5 template< typename T, T first, T last >
6 class Enum
7 {
8 public:
9  class Iterator
10  {
11  public:
12  Iterator( int value ) :
13  m_value( value )
14  { }
15 
16  T operator*( void ) const
17  {
18  return (T)m_value;
19  }
20 
21  void operator++( void )
22  {
23  ++m_value;
24  }
25 
26  bool operator!=( Iterator rhs )
27  {
28  return m_value != rhs.m_value;
29  }
30 
31  private:
32  int m_value;
33  };
34 
35 };
36 
37 template< typename T, T first, T last >
39 {
40  return typename Enum<T,first,last>::Iterator( (int)first );
41 }
42 
43 template< typename T, T first, T last >
45 {
46  return typename Enum<T,first,last>::Iterator( ((int)last) + 1 );
47 }
Definition: enumclass.h:9
Definition: enumclass.h:6