Allowing duplicate template specialisations
Is there a way to allow multiple definitions of the same template
specialisation?
For instance, one way of tagging COM interfaces with their associated UUID
is using templates like this:
template<typename T> struct comtype {};
template<> struct comtype<IUnknown> { static const IID& uuid() { return
IID_IUnknown; } }
template<typename T> inline IID& uuidof(Itf*) { return comtype<T>::uuid();
}
Code can then get at the IID like so:
IUnknown* p = NULL; HRESULT hr = q->QueryInterface(uuidof(p), &p);
The problem is that it is very hard (impossible in the case of a library)
to ensure that there is only one instance of each template specialisation.
Every file that uses a COM interface pointer needs the appropriate
comtype specialisation but files may include two different instances via
seperate include chains. When these comtypes are provided by several
third-parties it becomes a real problem.
As the definitions for any given specialisation should be identical, I
would ideally like any one of them to be chosen by the compiler rather
than an error about multiple definitions. Is this possible?
Many thanks.
Alex Lamaison
-- Easy SFTP for Windows Explorer (http://www.swish-sftp.org)
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]