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/wg...2004/n1704.pdf
>
> shows printf implementation using variadic templates. *Maybe you
> could emulate that if using gcc and variadic templates is acceptable
> to you.