这是排序 - 可能的,但用法看起来不会很好。对于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