Template to remove reference.

J

jeff_d_harper

Hi,

I need a template that will remove references from a type. Suppose the
template I need is named Drop_ref. I'd like to do something like this
.. . .

Drop_ref<SomeClass &>::type InstanceOfSomeClass;

would be equivalent to

SomeClass InstanceOfSomeClass;


Unfortunately, it must work with a C++ compiler that does not have
partial template specialization. Microsoft has yet to bring Embedded
Visual C++ up to ISO standards. If someone could post a work around
I'd be very appreciative.
 
M

mlimber

Hi,

I need a template that will remove references from a type. Suppose the
template I need is named Drop_ref. I'd like to do something like this
. . .

Drop_ref<SomeClass &>::type InstanceOfSomeClass;

would be equivalent to

SomeClass InstanceOfSomeClass;


Unfortunately, it must work with a C++ compiler that does not have
partial template specialization. Microsoft has yet to bring Embedded
Visual C++ up to ISO standards. If someone could post a work around
I'd be very appreciative.

See the implementations in Boost.TypeTraits (http://boost.org) and Loki
(http://sourceforge.net/projects/loki-lib/). They both have some tricks
to make it work with VC++ 6.

Cheers! --M
 
V

Victor Bazarov

mlimber said:
[...request that could be easily satisfied with partial specialisation...]
Unfortunately, it must work with a C++ compiler that does not have
partial template specialization. Microsoft has yet to bring Embedded
Visual C++ up to ISO standards. If someone could post a work around
I'd be very appreciative.


See the implementations in Boost.TypeTraits (http://boost.org) and Loki
(http://sourceforge.net/projects/loki-lib/). They both have some tricks
to make it work with VC++ 6.

VC++ 6 is actually more advanced than Embedded VC++, or so I heard.
 
J

jeff_d_harper

I'd already checked out Boost. Unfortunately, it looks like it is not
possible to remove a reference with boost unless the compiler supports
partial template specialization. Or, a macro is used to setup type
traits for user defined types.

http://www.boost.org/doc/html/boost_typetraits/category.html#transform.broken_compiler_workarounds_

At your suggestion I looked at Loki. Unfortunately, it doesn't look
like the TypeTraits<T>::ReferredType is implemented in the VC6 version
of Loki.

In fact, when I grepped the VC6 Loki header files for ReferredType, I
found this comment:

//TODOSGB None of the parameter types are defined inside of TypeTraits,
e.g. PointeeType, ReferredType, etc...

I will probably implement a solution similar to Boost's "broken
compiler work around" where I use a macro to setup a type trait for all
my UDTs.

I look forward to the day when I no longer have to worry about how
complete my compiler's template support is.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top