Hi everyone,
I've been using templates for a while, but I'm not at full power yet
(knowledge=power)
. Does anyone know where I can get information on
this 'new' template usage?
template<a (b, c, d)>
Does one define it like:
template<typename A (typename B, typename C, typename D)>
{templated class/function definition here}
What is its use?
I also think that I've heard that ellipsis can also be used in the
template list. Is this true? If so, how is it used, and for what
purpose?
Thanks all,
Adrian
Hi Adrian,
The new template usage that you are referring to is not part of
the template standards of C++ I think. You will probably need to
verify it for yourself in comp.std.c++. Having said that, that
template syntax is used by <boost/function.hpp>. The boost people
use boost:
reprocessor (a preprocessor meta-programming library)
that essentially uses very nifty preprocessor tricks to map
foo<int (float, double)> to a proper looking template like
template<typename T1, typename T2, typename T3>
class foo;
You can see it is action for yourself if you look inside
boost::function. I like the work they did on it and find it
pretty awesome for them to use macros to help create partial
template specializations on the fly. As to what is the use of
this type of programming, well, boost::function sums it up
pretty nicely. I hope that answers your first question.
For the ellipsis, again, I am not sure but once more I think that
the "..." syntax has not yet be standardized. You will need to
verify it for yourself. What is its use? Imagine this:
I would like to write a max function that takes in arbitrary
number of parameters like so
template<typename T1, typename T2, ..., typename TN>
max( T1 &a, T2 &b, ..., TN &z );
this way, I can now call it like this
max( 1, 2, 3 ); or
max( 1.0, 2.0, 3.0, 4.5 );
Now having said that, looking again at boost function we notice that
it requires arbitrary number of arguments also. Yet using a combination
of nifty tricks, they are able to circumvent the problem that the
"..." syntax is unavailable. So it makes me wonder if the "..." syntax
is merely a convenience for the current ways to make it work.
You'll probably get more mileage if you post on the c++ standards
boards instead
But I hope I helped by giving you a better idea where templates can
go in the future.