views:

748

answers:

3
+4  Q: 

Variadic templates

C++0x will allow template to take an arbitrary number of arguments. What is the best use of this feature other than implementing tuples ?

+1  A: 
  • Type-safe printf
Konrad Rudolph
Yes, but I still have to see a very elegant implementation of that :-)
Nicola Bonelli
I think this specific example is somewhat of a degenerate case. Remember that for every instantiation the compiler needs to create more code. can you imagine creating 100+ versions of printf for every possible argument combination used? Oh the bloat!
shoosh
@Shy: not if all the versions are inline wrappers for the *real* printf.
CesarB
+1  A: 

Allowing things like Boost.Function to take arbitrary numbers of parameters

1800 INFORMATION
+9  A: 
  1. Type-safe printf is by far the most useful feature
  2. Forwarding of arbitrary many constructor arguments in factory methods
  3. Having arbitrary base-classes allows for putting and removing useful policies:
  4. Initializing by moving heterogenous typed objects directly into a container by having a variadic template'd constructor.
  5. Having a literal operator that can calculate a value for a user defined literal (like "10110b").

Sample to 3:

template<typename... T> struct flexible : T... { flexible(): T()... { } };

Sample to 4:

struct my_container { template<typename... T> my_container(T&&... t) { } };
my_container c = { a, b, c };

Sample to 5:

template<char... digits>
int operator "" b() { return convert<digits...>::value; }

See this example code: here

Johannes Schaub - litb