Вы можете реализовать свой класс таким образом, что вы можете написать это:
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
Здесь вы можете увидеть два похожих решения, которые я разместил вчера:
Инициализация массива шаблонов со списком значений
EDIT:
Подобные приемы, которые вы можете сделать, чтобы заполнить существующие контейнеры 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
СНОВА РЕДАКТИРОВАТЬ:
Я весело с оператором C ++ . Теперь это:
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!
Я думаю, это выглядит лучше!