
C++: Using Variadic Templates Cleanly - ingve
http://florianjw.de/en/variadic_templates.html
======
mattnewport
C++17 fold expressions will make this kind of thing a bit more convenient and
allow you to do some other neat things with a lot less boilerplate.

[http://en.cppreference.com/w/cpp/language/fold](http://en.cppreference.com/w/cpp/language/fold)

~~~
Camillo
What if you want to use a function instead of an operator?

~~~
mattnewport
Then you just fold the comma operator.

~~~
Camillo
I don't see how that would help. Maybe we're thinking of different things.

~~~
mattnewport
Yes, sorry, I misunderstood you. You can't use a fold expression to fold a
binary function over a parameter pack as far as I know. You can fold
application of a unary function using a fold over the comma operator though.

------
PythonicAlpha
As a former C++ programmer, I appreciate everybody that tries to make
programming in this language more logical.

I just think, that C++ and particularly the whole template system is just to
complicated.

I have enough work to do, finding solutions for the real world problems that
must be implemented -- I don't want to have more work fiddling around with
language specifics and even more trickery, just to have my programs running
maybe 1% faster.

C++, particularly the template system and the new standard library that is
based on the STL, disappointed me long time ago, when a whole group of
programmers where trying to find out what the compiler errors where about deep
inside the STL. The whole error handling inside the templates where so
muddled, that it was nearly impossible to find out what the trouble was,
without reading big parts of the STL source.

I trust, that today's compilers generate better error messages for templates,
but still I am not sure that the whole thing -- and particularly the STL -- is
worthwhile for most real-life problems.

~~~
berkut
1% faster?!

And what do you mean by "most real-life problems"? HN is rather biased towards
web development, so...

C++ is used for real life problems from web browsers, to physics engines,
fluid solvers, photorealistic renderers (in fact, pretty much all software
used to make most visual effects CG for movies is in C++), autopilot systems,
and pretty much everything in between.

And as yet, there's nothing else that comes close to allowing both high-level
abstractions/encapsulations and low-level memory alignment/allocation/control
as and when needed, which is important for high performance and memory
efficient (bit packing, tagged pointers, etc) code.

~~~
PythonicAlpha
What I meant was: I want to spent my time with the problems that I _must_
solve, not with by programming language induced problems!

When I really need speed, I always can implement single routines in pure C --
I don't need an STL abstraction for that, that feigns speed to the programmer,
but in the end it does not give it to him, because he chose the wrong
abstraction. It seems so easy: Just use the STL/std-c++ library and all your
speed problems are solved -- but std-libraries do not make a bad programmer a
good one -- instead, it creates programmers that invest their time in language
specifics instead in data structures and algorithms. So bad programmers will
be even worse in the end.

------
ezy
I appreciate the work here, and I'll remember this when I need it, but C++ is
long past gross.

Enough already, the committee needs to be less prideful and just add complete
macros/metaprogramming to the language already in C++14 and let apparently
smart programmers who can disentangle variadic type templates to stop wasting
brainpower and valuable time doing that and just write the compile-time
transformations they want to have happen.

~~~
jokoon
There are not so many language who can directly compile and optimize to
machine code though.

I'm not sure if java or C# can easily jit to have something that is close to
machine code. Anyway having machine code directly (and no need for VM) is
useful if you want to reduce the overhead and fully exploit your hardware.

Surely it's not for students or for casual programmers, but it has a use.

~~~
nabla9
It would be easier to just design better language that compiles into C++ and
can use existing libraries than continue with C++.

~~~
blywi
Ironically this is exactly how C++ itself started out: With a compiler that
compiles C++ code into C.

[https://en.wikipedia.org/wiki/Cfront](https://en.wikipedia.org/wiki/Cfront)

