Passing Variable Number of Arguments with different type - C++
I am coding in C++ and have a few questions regarding the ellipsis:
Is it possible to pass in class or class pointer into the ellipsis?
Basically what I want to do is to pass in variable number of arguments in the type of
char*
andclass
. I am using ellipsis currently and trying to figure out how to pass in the class. If ellipsis isn't applicable over here, what are the options available?
I want to let the user to directly call the function using func( params 1, params2, ...)
without explicitly assigning the params into a vector or array first before passing the vector or array as argument to the function.
You should consider that using variadic functions (C-style) is a dangerous flaw. If the objects passed to the function mismatch the type awaited, or if you don't put the exact number of parameters awaited, then you basically have a violent crash at runtime.
In Bjarne Stroustrup C++ In Depth Series - C++ Coding Standards - 101 Rules, Guidelines, And Best Practices by Herb Sutter and Andrei Alexandrescu, chapter 98: Don't use varargs (ellipsis)
I deeply subscribe to @tenfour's proposal:
- use an
std::vector
that contains all your parameters.
You can pass whatever you want to variadic functions, but this won't help you in writing convenient functions as you are losing the type information for the arguments.
Depending on what you want to achieve there are better alternatives:
-
chaining operators like
<<
or()
:helper() << a << b << c; helper(a)(b)(c);
-
using (pseudo-)variadic templates:
template<class T0> void func(T0 t0) { ... } template<class T0, class T1> void func(T0 t0, T1 t1) { ... } // ... // or if you can use C++0x features: template<class... Args> void func(Args... args) { ... }
- ... more?