Re: variable argument lists
Another form is to overload the single comma operator (,) of an
object. Yes, it is a strange form.
If the comma operator returns a reference to the object itself, you
could be something like:
(this code is neither tested nor compiled (I'm writing it on the fly),
and it isn't efficient, in fact it is only a wrapper syntax to pass
directly a vector to a function, but I think that it is interesting as
alternative, at least you could use the main idea behind comma
operator overload.)
// Overloading comma operator.
// ---------------------------
class object
{
public:
object( int val ){ values.push_back( val ); }
object& operator ,( const object& obj )
{
std::copy( obj.values.begin(), obj.values.end(),
std::back_inserter( values ) );
return *this;
}
object& operator ,( int v )
{
values.push_back( v );
return *this;
}
protected:
std::vector< int > values;
};
void func( const object& obj )
{
}
// using it
func ( object(5), 3, 4, 5 );
On Nov 26, 6:26 pm, Larry Evans <cppljev...@suddenlink.net> wrote:
On 11/26/08 10:06, deathwillendthis...@gmail.com wrote:
[snip]
Variable arguments can't be listed first, so my first thought was to
simply declare all possible functions:
template< class T0 >
void Log( const char* Format, const T0 arg0, const int iLevel, const
bool bLineEnd );
template< class T0, class T1 >
void Log( const char* Format, const T0 arg0, const T1 arg1, const int
iLevel, const bool bLineEnd );
and so on.
Implementating this was easy at first sight: let the Logger class have
a method that accepts a va_list and construct the list from the
arguments.
template< class T0 >
void Log( const char* Format, const T0 arg0, const int iLevel, const
bool bLineEnd )
{
va_list args;
va_start( args, Format );
InternalLogFunction( Format, args, iLevel, bLineEnd );
va_end( args );
}
This does excatly what I want, though it's not overly pretty, but gcc
(4.1.2) chokes on this saying "va_start used in function with fixed
args".
[snip]
Section 3.2 of:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1704.pdf
shows printf implementation using variadic templates. Maybe you
could emulate that if using gcc and variadic templates is acceptable
to you.