summaryrefslogtreecommitdiff
path: root/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount')
-rw-r--r--ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount95
1 files changed, 95 insertions, 0 deletions
diff --git a/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount b/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount
new file mode 100644
index 00000000000..be8b252d4de
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount
@@ -0,0 +1,95 @@
+From: Gianni Mariani <gi2nospam@mariani.ws>
+Date: 26 Jul 2003 04:52:43 GMT
+Newsgroups: comp.lang.c++
+Subject: Re: enum count
+
+Clive wrote:
+> If you have an enum, is there any way during execution to find the number of
+> values in the enum?
+> Say I have,
+>
+> enum great { five, ten, fifteen };
+>
+> How could I get the number 3 from that?
+>
+>
+
+replace the enums with objects that report themselves to a registry.
+
+
+I have done it in the past using a template ...
+
+templace <typename base>
+class ExposedEnum : public base
+{
+ public:
+ int enum_val;
+ ExposedEnum( int number )
+ : enum_val( number )
+ {
+ ExposedEnumRegister<base>::Register( *this );
+ }
+
+ ExposedEnum( int number )
+ : enum_val( ExposedEnumRegister<base>::GetNextNumber() )
+ {
+ ExposedEnumRegister<base>::Register( *this );
+ }
+
+
+
+// some more stuff ...
+
+ operator int () const
+ {
+ return enum_val;
+ }
+
+ explicit ExposedEnum( const ExposedEnum & foo );
+};
+
+
+template <typename base>
+class ExposedEnumRegister
+{
+
+ static int GetNextNumber ....
+
+ static void Register ....
+
+ static int Count ....
+
+}
+
+
+Now you can forward declare them...
+
+extern ExposedEnum< great > five;
+
+extern ExposedEnum< great > ten;
+
+extern ExposedEnum< great > fifteen;
+
+
+
+
+In a cpp file you can instantiate them.
+
+ExposedEnum< great > five( 5 );
+
+ExposedEnum< great > ten( 10 );
+
+ExposedEnum< great > fifteen;
+
+
+Now, if you want to know how many you have :
+
+ExposedEnumRegister< great >::Count();
+
+
+
+Disclaimer - it's an outline only, yes it's incomplete.
+
+G
+
+$Id$