
"Jody Hagins" <jody-boost-011304@atdesk.com> wrote
Matt Hurd <matt.hurd@gmail.com> wrote:
Yes it is when you call it a UUID.
Here is an example of a somewhat portable one:
http://www.dre.vanderbilt.edu/Doxygen/Current/html/ace/UUID_8h-source.html
Certainly clumsier than a size_t.
There are many portable versions of creating a UUID, but I would imagine that one would have to be available at compile time to make use of it in templates. I think M$ compilers provide this as a preprocessor extension, but I am not sure about any others.
What I rally meant was to piggiback on the tool. Recall guidgen, that MS provides, can generate something like this: // {DCC34F20-AEE3-4e2f-B2CE-A6FA9ED6AE05} DEFINE_GUID(<<name>>, 0xdcc34f20, 0xaee3, 0x4e2f, 0xb2, 0xce, 0xa6, 0xfa, 0x9e, 0xd6, 0xae, 0x5); Every MS programmer is used to doing this to create COM objects. The compile-time version can be easily implemented, something like: template<long, short, short, char, char, char, char, char, char, char, char> struct uuid; The user then would instantiate it just copy-pasting the stuff generated by the tool: uuid<0xdcc34f20, 0xaee3, 0x4e2f, 0xb2, 0xce, 0xa6, 0xfa, 0x9e, 0xd6, 0xae, 0x5>, and here we have a unique type. Now, this is not a brainer to create a unique type, and everybody is used to doing this, but the advantage of this one is in that it can be split into four integers, and later re-created. Therefore it can be passed via sizeof, and therefore it can be used in the typeof implementation. Having said all this, I don't actually believe it's a good idea to make poor compilers operate on four integers where one is enough. The compilers are already stressed beyond any reasonable measure by all our meta-programming excersises. And I believe this particular place is kind of bottleneck in my implementation... Arkadiy