mirror of
https://github.com/aantron/better-enums.git
synced 2025-12-06 16:56:42 +08:00
The documentation is now generated from markdown. Samples are generated from the tutorial pages. Testing is done by a Python script which runs the tests for a large number of compilers. This version is not very developer-friendly - the Python scripts need ways of limiting what compilers they try to run. If you don't have 15 compilers installed, you won't be able to run the tests in this commit. Fix coming soon.
1.2 KiB
1.2 KiB
Iteration
Better Enums makes it easy to iterate over the values you have declared. For example, this:
#include <iostream>
#include <enum.h>
<em>ENUM(Channel, int, Red, Green = 2, Blue)</em>
int main()
{
<em>for</em> (<em>size_t index = 0</em>; <em>index < Channel::_size</em>; <em>++index</em>) {
Channel channel = <em>Channel::_values()[index]</em>;
std::cout << channel._to_integral() << " ";
}
std::cout << std::endl;
will print "0 2 3". And this:
<em>for</em> (<em>size_t index = 0</em>; <em>index < Channel::_size</em>; <em>++index</em>) {
const char *name = <em>Channel::_names()[index]</em>;
std::cout << name << " ";
}
std::cout << std::endl;
will print "Red Green Blue".
If you are using $cxx11, you can have much nicer syntax:
<em>for (Channel channel : Channel::_values())</em>
std::cout << <em>channel._to_integral()</em> << " ";
std::cout << std::endl;
<em>for (const char *name : Channel::_names())</em>
std::cout << <em>name</em> << " ";
std::cout << std::endl;
return 0;
}