E 'sort- di possibile, ma l'utilizzo non sarà molto bello. Per exxample:
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
template <class T>
class list_of
{
std::vector<T> data;
public:
typedef typename std::vector<T>::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<int>& args)
{
std::copy(args.begin(), args.end(), std::ostream_iterator<int>(std::cout, " "));
}
int main()
{
print((list_of<int>(), 1, 2, 3, 4, 5));
}
Questa lacuna verrà risolto in C++ 0x, dove si può fare:
void print(const std::initializer_list<int>& args)
{
std::copy(args.begin(), args.end(), std::ostream_iterator<int>(std::cout, " "));
}
int main()
{
print({1, 2, 3, 4, 5});
}
o anche con tipi misti:
template <class T>
void print(const T& t)
{
std::cout << t;
}
template <class Arg1, class ...ArgN>
void print(const Arg1& a1, const ArgN& ...an)
{
std::cout << a1 << ' ';
print(an...);
}
int main()
{
print(1, 2.4, 'u', "hello world");
}
perché avete bisogno di fare usando l'operatore virgola? Per esempio. Boost.Assign offre già una sintassi precisa, ma usa 'operator()'. –
perché voglio l'utilizzo semplice come MyFunction (1,2,3) non MyFunction (boost :: list_of (1) (2) (3)) – uray