您可以實現以這樣的方式,你可以寫你的類:
MyClass<int> array;
array = 1,2,3,4,5,6,7,8,9,10;//dont worry - all ints goes to the array!!!
這是我實現:
template <class T>
class MyClass
{
std::vector<T> items;
public:
MyClass & operator=(const T &item)
{
items.clear();
items.push_back(item);
return *this;
}
MyClass & operator,(const T &item)
{
items.push_back(item);
return *this;
}
size_t Size() const { return items.size(); }
T & operator[](size_t i) { return items[i]; }
const T & operator[](size_t i) const { return items[i]; }
};
int main() {
MyClass<int> array;
array = 1,2,3,4,5,6,7,8,9,10;
for (size_t i = 0 ; i < array.Size() ; i++)
std::cout << array[i] << std::endl;
return 0;
}
輸出:
1
2
3
4
5
6
7
8
9
10
見在線演示:http://www.ideone.com/CBPmj
個
兩個類似的解決方案,您可以在這裏看到我昨天發佈:
Template array initialization with a list of values
編輯:
類似的技巧,你可以做填充現有的STL容器。例如,你可以這樣寫:
std::vector<int> v;
v+=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; //push_back is called for each int!
所有你需要重載()
和,
操作爲:
template<typename T>
std::vector<T>& operator+=(std::vector<T> & v, const T & item)
{
v.push_back(item); return v;
}
template<typename T>
std::vector<T>& operator,(std::vector<T> & v, const T & item)
{
v.push_back(item); return v;
}
工作演示:http://ideone.com/0cIUD
再次編輯:
我是having fun with C++ operator。現在這個:
std::vector<int> v;
v << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; //inserts all to the vector!
我覺得這看起來好多了!
我想看看你試試看。我認爲你可能還需要一件事情,因爲逗號分隔列表int不知道它被分配的類型,賦值操作符具有最低優先級,所以它不會發現,直到太晚(我認爲)。 – 2011-03-22 17:56:58
@Martin:我發佈了工作代碼鏈接。請看看! – Nawaz 2011-03-22 17:59:23
@Martin:'operator,()'具有所有二元運算符的最低優先級,首先對operator =()進行評估,然後對所有運算符()進行評估。 – Xeo 2011-03-22 18:00:48