is it possible to construct variadic arguments for function by overloading operator comma of the argument? i want to see an example how to do so.., maybe something like this
It is sort-of possible, but the usage won't look very nice. For exxample:
#include
#include
#include
#include
template
class list_of
{
std::vector data;
public:
typedef typename std::vector::const_iterator const_iterator;
const_iterator begin() const { return data.begin(); }
const_iterator end() const { return data.end(); }
list_of& operator, (const T& t) {
data.push_back(t);
return *this;
}
};
void print(const list_of& args)
{
std::copy(args.begin(), args.end(), std::ostream_iterator(std::cout, " "));
}
int main()
{
print( (list_of(), 1, 2, 3, 4, 5) );
}
This shortcoming will be fixed in C++0x where you can do:
void print(const std::initializer_list& args)
{
std::copy(args.begin(), args.end(), std::ostream_iterator(std::cout, " "));
}
int main()
{
print( {1, 2, 3, 4, 5} );
}
or even with mixed types:
template
void print(const T& t)
{
std::cout << t;
}
template
void print(const Arg1& a1, const ArgN& ...an)
{
std::cout << a1 << ' ';
print(an...);
}
int main()
{
print( 1, 2.4, 'u', "hello world" );
}