Re: template question
On 4/15/2011 12:40 PM, John wrote:
I have a templated class whose template parameter depends on a library.
For most platforms, the library defines a certain type as an integer, so
my original class was
//library code
typedef int SomeType;
SomeType ATYPE = 1;
//my code
template <int T> class A {};
...
A<ATYPE> a;
However, on a few platforms, that type is a structure/class, so the
above template fails since I need
//library code
struct X {};
typedef struct X SomeType;
SomeType ATYPE;
//my code
template <class T> class A {};
...
A<ATYPE> a;
template <class T> class A {};
Which of course fails when the library defines the type as an integer.
Is there anyway to make the template class accept both of these without
resorting to #ifdef's?
Not really.
Does your class need to have the *value* as its template argument?
Perhaps you could rewrite it to make the constructor of your class
accept that argument.
If you're relying on the value/constant significantly and don't want to
introduce another member, etc., then #ifdef is the simplest approach.
You could try introducing some kind of framework that would *either* get
your 'a' defined as an object of the template based on the value (if
your 'SomeType' is an integral type, for instance) *or* as the
constructor argument (if 'SomeType' is not an integral type, that is),
but it could be quite convoluted, and I'm not sure you need that
complexity. Disclaimer: I've not attempted that, my speculation on the
complexity is just that, a speculation.
V
--
I do not respond to top-posted replies, please don't ask