這是排序 - 可能的,但用法看起來不會很好。對於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));
}
這一缺點將被固定C++ 0x中,你可以這樣做:
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});
}
甚至混合類型:
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");
}
爲什麼你需要做的它使用逗號運算符?例如。 Boost.Assign已經給你一個整潔的語法,但它使用'operator()'。 – 2010-03-07 12:17:23
,因爲我希望MyFunction(1,2,3)不是MyFunction(boost :: list_of(1)(2)(3))這樣簡單的用法。 – uray 2010-03-07 12:28:46