472,782 Members | 1,162 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,782 software developers and data experts.

'new' template usage

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

Mar 7 '07 #1
2 1946
ad*************@gmail.com wrote:
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::preprocessor (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. :)
Mar 7 '07 #2
On 7 Mar, 01:11, adrian.hawry...@gmail.com wrote:
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?
I'm sorry to say (since I'd like to have them) that neither of those
are part of the current standard but may be part of the next (the
ellipsis thing I'm quite sure of, but the first I don't know). The
problem with this is that since they are not part of any standard yet,
which means that there probably are no compilers supporting it. And if
there are the functionality of those constructs might change until
they have been standardized.

As I understand things they hope to have the new standard out and
approved by 2009, which means that most things will have settles
sometime by 2008 and widespread compiler support should probably not
be expected until 2010 or later. Worst case scenario would be that
they can't agree about how something is supposed to work and throw it
out of the standard to be part of a separate TR or the next version.
So my advice is to not bother with these kinds of things for at least
a year in any serious project. You can of course play around to stay
up to date.

For more information about what will/might be in the next standard see
http://www.open-std.org/jtc1/sc22/wg...007/n2142.html

--
Erik Wikström

Mar 7 '07 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

9
by: Aaron Anodide | last post by:
Hello, I am using the following template class as a shorthand for zero-ing memory: template<class T> class ZeroMem : public T { public: ZeroMem(void)
6
by: Dmitry Epstein | last post by:
Here is an example of a problem, which I tried to reduce to its bare essentials: // begin test1.cpp class E { public: template<class T> static void f(); }; template<class T> void E::f() {}
11
by: Jonan | last post by:
Hello, For several reasons I want to replace the built-in memory management with some custom built. The mem management itlsef is not subject to my question - it's ok to the point that I have...
1
by: GaryB | last post by:
Hi, (Posted this in scripting.wsh before I realised that it might be better placed here - sorry if you;ve got two copies) I want my (IE) Intranet users to be able to create a new Word document...
3
by: sks | last post by:
Hello all Is the usage of extern keyword valid for telling the compiler to NOT instantiate a template and to link it from an another binary? For example: Suppose module A's binary contains a...
3
by: Larry Beck | last post by:
Below is a problem I am having with templates. I am trying to use a template to avoid having multiple class methods that differ only in the return type of the pointer. I have tried putting in...
45
by: charles.lobo | last post by:
Hi, I have recently begun using templates in C++ and have found it to be quite useful. However, hearing stories of code bloat and assorted problems I decided to write a couple of small programs...
3
by: Anonymous | last post by:
Could someone please explain template template classes, showing: 1). Why they are needed / i.e what problem do they solve ? 2). A simple example I have read various articles etc, but it still...
4
by: Ed | last post by:
Hi, guys, In C language manner, we need to put a "struct" token before one struct variable declaration like following. <code> struct Apple { float Price; };
0
by: Rina0 | last post by:
Cybersecurity engineering is a specialized field that focuses on the design, development, and implementation of systems, processes, and technologies that protect against cyber threats and...
3
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 2 August 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM) The start time is equivalent to 19:00 (7PM) in Central...
0
linyimin
by: linyimin | last post by:
Spring Startup Analyzer generates an interactive Spring application startup report that lets you understand what contributes to the application startup time and helps to optimize it. Support for...
0
by: kcodez | last post by:
As a H5 game development enthusiast, I recently wrote a very interesting little game - Toy Claw ((http://claw.kjeek.com/))。Here I will summarize and share the development experience here, and hope it...
0
by: Taofi | last post by:
I try to insert a new record but the error message says the number of query names and destination fields are not the same This are my field names ID, Budgeted, Actual, Status and Differences ...
0
by: Rina0 | last post by:
I am looking for a Python code to find the longest common subsequence of two strings. I found this blog post that describes the length of longest common subsequence problem and provides a solution in...
5
by: DJRhino | last post by:
Private Sub CboDrawingID_BeforeUpdate(Cancel As Integer) If = 310029923 Or 310030138 Or 310030152 Or 310030346 Or 310030348 Or _ 310030356 Or 310030359 Or 310030362 Or...
0
by: lllomh | last post by:
Define the method first this.state = { buttonBackgroundColor: 'green', isBlinking: false, // A new status is added to identify whether the button is blinking or not } autoStart=()=>{
2
by: DJRhino | last post by:
Was curious if anyone else was having this same issue or not.... I was just Up/Down graded to windows 11 and now my access combo boxes are not acting right. With win 10 I could start typing...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.